Mongodump: campo não reconhecido 'snapshot'

33

Estou usando o mongodump nas ferramentas do mongo para baixar um backup do meu servidor. No entanto, ao executar o comando, o comando retorna "Campo não reconhecido 'instantâneo'".

O erro completo é:

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

Mongodump --version retorna:

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

Talvez eu precise fazer o downgrade da minha versão? Caso contrário, não tenho certeza de onde ir a partir daqui ...

Dave
fonte
1
Quais são as suas versões do servidor O / S e MongoDB? Sua mongodump --versionsaída sugere que você construiu as ferramentas a partir do código-fonte, portanto não é óbvio a que versão do MongoDB pode corresponder. Sempre que possível, sugiro baixar os binários oficiais.
Stennie
1
Eu tenho o mesmo problema, acho que é porque eu uso o mongoexport 3.6.4, com o mongoDB server 4.0.
Antoine

Respostas:

13

Você certamente tem uma diferença de versão entre o mongodump e o servidor mongoDB (3.6 vs 4.0).

Você pode usar a janela de encaixe para o resgate:

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

Com o docker, você pode usar uma versão precisa do tools cli sem instalá-lo.

Você pode até especificar um alias (em .bashrc):

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

Nota: A pasta em que o dump é salvo precisará ter permissões de gravação para que o usuário do mongodb no contêiner possa gravar no volume montado. Isso pode ser conseguido definindo manualmente as permissões na pasta de despejo antes de executar o comando acima.

No exemplo acima, que seria: mkdir -m 777 dump. Após a conclusão do despejo, as permissões podem ser modificadas de volta ao normal (ou seja, sudo chmod 755 dump).

Antoine
fonte
1
Eu continuo recebendo o erro Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission denied. Eu tentei com -u 0e -o /tmp/dump, mas não consegui fazê-lo funcionar. Finalmente acabei iniciando um contêiner, executando o despejo e copiando-o para fora do contêiner. Alguma idéia de onde eu errei com o one-liner?
Terceiro #
1
Você precisa definir o uid adequadamente:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100