Mongodump: нераспознанное поле «снимок»

33

Я использую mongodump из инструментов mongo для загрузки резервной копии моего сервера. Однако, когда я запускаю команду, команда возвращает «Нераспознанное поле« снимок »».

Полная ошибка:

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

Mongodump - версия возвращает:

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

Возможно, мне нужно понизить версию? В противном случае не уверены, куда идти отсюда ...

Дейв
источник
1
Какие у вас версии O / S и сервера MongoDB? Ваш mongodump --versionвывод предполагает, что вы создали инструменты из исходного кода, поэтому неясно, какой версии MongoDB может соответствовать. По возможности я бы предложил скачать официальные бинарные файлы.
Стенни
1
У меня та же проблема, я думаю, что это потому, что я использую mongoexport 3.6.4, с mongoDB server 4.0.
Антуан

Ответы:

13

У вас определенно есть разница в версии между mongodump и вашим сервером mongoDB (3.6 против 4.0).

Вы можете использовать докер для спасения:

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

С докером вы можете использовать точную версию инструментов, не устанавливая ее.

Вы даже можете указать псевдоним (в .bashrc):

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

Примечание . Папка, в которой сохранен дамп, должна иметь разрешения на запись, чтобы пользователь mongodb в контейнере мог выполнять запись на подключенный том. Это может быть достигнуто путем ручной установки разрешений для папки дампа перед выполнением вышеуказанной команды.

В приведенном выше примере это будет: mkdir -m 777 dump. После того, как дамп завершен, разрешения могут быть возвращены в нормальное состояние (т. Е. sudo chmod 755 dump).

Antoine
источник
1
Я продолжаю получать ошибку Failed: error dumping metadata: error creating directory for metadata file dump/{COLLECTION}: mkdir dump: permission denied. Я попробовал с -u 0и -o /tmp/dump, но не смог заставить его работать. В конце концов я запустил контейнер, запустил дамп и скопировал его из контейнера. Какие-нибудь идеи, где я ошибся с однострочником?
Третий
1
Вам нужно правильно установить uid:docker run --rm -v $(pwd):/workdir/ -w /workdir/ -u $(id -u) mongo:4.0 mongodump ...
ltn100
55

Добавлять --forceTableScan

Пример:

mongodump --forceTableScan -d database_name -o target_directory

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

Marcell
источник
Это сработало для меня. Спасибо
Таранг Бхалодиа
Не могли бы вы объяснить, что означает ошибка, и почему этот аргумент так сильно помогает?
F3L1X79