Монгорестор от stdin - PullRequest
       31

Монгорестор от stdin

0 голосов
/ 24 сентября 2018

Кому-нибудь когда-нибудь удавалось восстановить mongodump из stdin?

Я создал файл резервной копии с помощью указанной команды:

mongodump --archive > file

Но ссылка никогда не объясняетв каком формате находится архив или как его восстановить.Некоторые люди говорят, что вы должны вводить его через стандартный ввод, но они остаются загадкой, так как нет никаких доказательств того, что это действительно возможно .

На самом деле, я сделал следующие попытки, безуспешно:

cat file | mongorestore
mongorestore -vvvvv --archive < file
mongorestore -vvvvv --archive=file

Все эти команды заканчиваются одной и той же ошибкой:

Failed: stream or file does not appear to be a mongodump archive

Для справки мне удалось восстановить архив, созданный классическим способом.

Зачем мне нужно использовать --archive to stdout?

Мой mongodb находится внутри докера.

Опция, которую я сейчас используюсоздает файл резервной копии внутри докера, который я затем копирую на хост , используя команду docker cp, поэтому я использую вдвое больше необходимого пространства (до того, каквнутри контейнера).

К сожалению, докер не имеет монтирования с хоста, и я не могу (пока) перезапустить его, чтобы добавить опцию.Я искал быстрый вариант.

1 Ответ

0 голосов
/ 12 июня 2019

Таким образом, в соответствии с официальным MongoDB mongodump doc и mongorestore doc :

Для вывода дампа в стандартный поток вывода для передачи в другой каналпроцесс, запустите mongodump с опцией архивирования, но пропустите имя файла.Чтобы восстановить данные из стандартного ввода, запустите mongorestore с параметром --archive, но не указывайте имя файла.

Так что на самом деле вам не нужно сначала монгодумпировать в файл, а затем читать из него, просто передавая по каналуmongodump и mongorestore, как это:

mongodump --archive | mongorestore --archive --drop

Однако, вы, вероятно, можете получить другую проблему, как я сделал https://stackoverflow.com/a/56550768/3785901.

В моем случае, я должен использовать --nsFrom и --nsToвместо --db, или магазин mongorestore работал не так, как ожидалось.Итак, последняя команда, которую я успешно выполнил для mongodump / mongorestore:

mongodump --host HOST:PORT --db SOURCE_DB --username USERNAME --password PASSWORD --archive | mongorestore --host HOST:PORT --nsFrom 'SOURCE_DB.*' --nsTo 'TARGET_DB.*' --username USERNAME --password PASSWORD  --archive --drop

Удачи.

...