Подтвердить что ты не робот

Как скопировать базу данных с одного сервера MongoDB на другой?

У меня есть два mongodbs на другом сервере, оба начинаются с --auth. Теперь я хочу скопировать db с одного сервера на другой.

> mongo
> use admin
> db.copyDatabase("mydb","mydb","another_server")

Он показывает:

{ "errmsg" : "", "ok" : 0 }

и

> db.getLastError()
null

Кажется, нет ошибки, но копия не удалась. Какую правильную команду использовать?

4b9b3361

Ответ 1

Если вы используете - auth, вам нужно указать свое имя пользователя/пароль там...

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

db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>);

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

Ответ 2

Начиная с Mongo версии 3.2 вы можете сделать это, используя mongodump/mongorestore:

mongodump  --host <from_host> --db <from_db> --archive | mongorestore --host <to_host> --archive

Дополнительную информацию можно найти по адресу:

https://docs.mongodb.com/manual/reference/program/mongodump/ https://docs.mongodb.com/manual/reference/program/mongorestore/

Чтобы сделать удаленный доступ к Монго, вы можете создать для него туннель SSH:

создает туннель к удаленному серверу mongodb и туннелирует его через порт 27117 к локальному клиенту

ssh -fN -L 27117:localhost:27017 <remote_host> 

В этом случае команда для запуска на локальном компьютере, который вы хотите восстановить, может быть:

mongodump  --port 27117 --db <from_db> --archive | mongorestore --archive

Ответ 3

В дополнение к ответу Джастина Дженкинса помните, что вы также можете использовать туннель ssh, если у вас нет mongodb, открытого в сети (только для локального хоста)

Я использую экран для переключения между "задачами". для моего удобства туннель ssh и mongo выполняются на отдельных вкладках экрана.

шаг 1: создать туннель

ssh [email protected] -L 27018:localhost:27017
...Enter your password

Шаг 2:

mongo
use admin
db.copyDatabase(<fromdb>,<todb>,"localhost:27018",<username>,<password)

Ответ 4

Я знаю, что это старый пост, но кто-нибудь может мне помочь с этим. Я пробовал решение, данное marcelde, но получаю сообщение об ошибке: "Не удалось подключиться к серверу localhost: 27018, попытка подключения не удалась". Когда я пытаюсь напрямую подключиться к моему промежуточному серверу из локальной сети. Я получаю приведенную ниже ошибку "Необходимо указать имя набора для набора соединений ConnectionStrings". Я использую db.copyDatabase. Я отправляю это как ответ, потому что я не могу добавить как комментарий.

Ответ 5

В дополнение к ответу Майка Шонё, если имя вашей базы данных на конечном сервере не совпадает с именем на исходном сервере, вам нужно переписать пространство имен. В сочетании с аутентификацией я заставил это работать, используя опцию --uri, для которой требуется последняя версия mongo (> 3.4.6):

mongodump --uri="mongodb://$mongoUser:[email protected]$sourceHost/$sourceDb" --gzip --archive | mongorestore --uri="mongodb://$mongoUser:[email protected]$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive