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 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/

За допомогою докера ви можете використовувати точну версію інструментів 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).


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.