web-dev-qa-db-ja.com

Mongodump:認識されないフィールド「スナップショット」

Mongoツールのmongodumpを使用して、サーバーのバックアップをダウンロードしています。しかし、コマンドを実行すると、コマンドは「認識できないフィールド 'スナップショット'」を返します。

完全なエラーは次のとおりです。

Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'.

Mongodump --versionは次を返します:

mongodump version: built-without-version-string
git version: built-without-git-spec
Go version: go1.7.3
   os: linux
   Arch: AMD64
   compiler: gc
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

バージョンをダウングレードする必要がありますか?そうでなければ、ここからどこへ行くべきかわからない...

38
Dave

確かに、mongodumpとご使用のmongoDBサーバーのバージョンには違いがあります(3.6と4.0)。

あなたはdockerを使って救うことができます:

docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump -h server -d $database --out /workdir/dump/

Dockerを使用すると、インストールせずに正確なバージョンのツールcliを使用できます。

別名(.bashrc内)を指定することもできます。

alias mongodump="docker run --rm -v $(pwd):/workdir/ -w /workdir/ mongo:4.0 mongodump"

注:コンテナー内のmongodbユーザーがマウントされたボリュームに書き込むことができるように、ダンプが保存されるフォルダーには書き込み権限が必要です。これは、上記のコマンドを実行する前に、ダンプフォルダーのアクセス許可を手動で設定することで実現できます。

上記の例では、mkdir -m 777 dumpになります。ダンプが完了した後、アクセス許可を通常に戻すことができます(つまり、Sudo chmod 755 dump)。

16
Antoine

追加 --forceTableScan

例:

mongodump --forceTableScan -d database_name -o target_directory

http://aug2uag.blogspot.com/2018/08/mongoexport-unrecognized-field-snapshot.html

65
Marcell

私のCentOSでも、mongodbがユーザー名とパスワードで認証される以下の仕様で同じ問題に直面していました

enter image description here

以下のコマンドを使用しました:

mongodump --forceTableScan -h <mongo database where it is hosted> -u <username>  -d <databasename>  -o /<output directory>/

プロンプトが表示されたら、mongodbパスワードを入力しました。

デフォルトでは、mongodumpは_idインデックスを使用して、そのインデックスでコレクションをスキャンできる場合(たとえば、ビューにインデックスがない場合)を使用します。 -forceTableScanを指定すると、mongodumpは_idインデックスを使用せずにコレクションデータをスキャンします。

詳細については、この link を参照してください。

1
viveknaskar