Mongodump: Nicht erkanntes Feld "Schnappschuss"

33

Ich verwende Mongodump von Mongo Tools, um ein Backup meines Servers herunterzuladen. Während ich den Befehl ausführe, gibt der Befehl jedoch "Nicht erkanntes Feld 'Momentaufnahme'" zurück.

Der volle Fehler ist:

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

Mongodump --version gibt zurück:

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

Möglicherweise muss ich meine Version downgraden? Ansonsten unsicher, wohin man von hier aus gehen soll ...

Dave
quelle
1
Was sind Ihre Versionen von O / S und MongoDB Server? Ihre mongodump --versionAusgabe legt nahe, dass Sie die Tools aus dem Quellcode erstellt haben, sodass nicht klar ist, welcher Version von MongoDB dies entspricht. Nach Möglichkeit würde ich vorschlagen, die offiziellen Binärdateien herunterzuladen.
Stennie
1
Ich habe das gleiche Problem, ich denke, es liegt daran, dass ich einen mongoexport 3.6.4 mit mongoDB Server 4.0 verwende.
Antoine

Antworten:

13

Sie haben sicherlich einen Versionsunterschied zwischen mongodump und Ihrem mongoDB-Server (3.6 vs 4.0).

Sie können Docker zur Rettung verwenden:

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

Mit Docker können Sie eine genaue Version von Tools Cli verwenden, ohne es zu installieren.

Sie können sogar einen Alias ​​(in .bashrc) angeben:

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

Hinweis: Der Ordner, in dem der Speicherauszug gespeichert ist, muss über Schreibberechtigungen verfügen, damit der Mongodb-Benutzer im Container auf das bereitgestellte Volume schreiben kann. Dies kann erreicht werden, indem die Berechtigungen für den Speicherauszugsordner manuell festgelegt werden, bevor der obige Befehl ausgeführt wird.

In dem obigen Beispiel das wäre: mkdir -m 777 dump. Nachdem der Dump abgeschlossen ist, können die Berechtigungen wieder auf einen normalen Wert (dh sudo chmod 755 dump) geändert werden .

Antoine
quelle
1
Ich bekomme immer den Fehler Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission denied. Ich habe es mit -u 0und versucht -o /tmp/dump, konnte es aber nicht zum Laufen bringen. Schließlich habe ich einen Container gestartet, den Dump ausgeführt und dann aus dem Container kopiert. Irgendwelche Ideen, bei denen ich mit dem Einzeiler einen Fehler gemacht habe?
Thirdender
1
Sie müssen die UID entsprechend einstellen:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100