Mongodump: champ «instantané» non reconnu

33

J'utilise mongodump à partir des outils mongo pour télécharger une sauvegarde de mon serveur. Cependant, lorsque j'exécute la commande, la commande renvoie "Champ non reconnu 'snapshot'".

L'erreur complète est:

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

Mongodump --version renvoie:

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

Je pourrais avoir besoin de rétrograder ma version? Sinon, je ne sais pas où aller d'ici ...

Dave
la source
1
Quelles sont vos versions de serveur O / S et MongoDB? Votre mongodump --versionsortie suggère que vous avez construit les outils à partir des sources, il n'est donc pas évident de savoir à quelle version de MongoDB cela pourrait correspondre. Dans la mesure du possible, je suggère de télécharger les fichiers binaires officiels.
Stennie
1
J'ai le même problème, je pense que c'est parce que j'utilise un mongoexport 3.6.4, avec mongoDB server 4.0.
Antoine

Réponses:

13

Vous avez certainement une différence de version entre mongodump et votre serveur mongoDB (3.6 vs 4.0).

Vous pouvez utiliser docker à la rescousse:

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

Avec docker, vous pouvez utiliser une version précise des outils cli sans l'installer.

Vous pouvez même spécifier un alias (en .bashrc):

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

Remarque: Le dossier dans lequel le vidage est enregistré devra disposer d'autorisations d'écriture pour que l'utilisateur mongodb dans le conteneur puisse écrire sur le volume monté. Cela peut être réalisé en définissant manuellement les autorisations sur le dossier de vidage avant d'exécuter la commande ci-dessus.

Dans l'exemple ci - dessus serait: mkdir -m 777 dump. Une fois le vidage terminé, les autorisations peuvent être modifiées pour revenir à une normale (c'est-à-dire sudo chmod 755 dump).

Antoine
la source
1
Je reçois toujours l'erreur Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission denied. J'ai essayé avec -u 0et -o /tmp/dump, mais je n'ai pas réussi à le faire fonctionner. J'ai finalement fini par démarrer un conteneur, en exécutant le vidage, puis en le copiant hors du conteneur. Des idées où je me suis trompé avec le one-liner?
Thirdender
1
Vous devez définir l'uid de manière appropriée:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100