Как скопировать базу данных с одного сервера MongoDB на другой?
У меня есть два mongodbs на другом сервере, оба начинаются с --auth
. Теперь я хочу скопировать db с одного сервера на другой.
> mongo
> use admin
> db.copyDatabase("mydb","mydb","another_server")
Он показывает:
{ "errmsg" : "", "ok" : 0 }
и
> db.getLastError()
null
Кажется, нет ошибки, но копия не удалась. Какую правильную команду использовать?
Ответы
Ответ 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