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

Копировать/клонировать базу данных mongodb вместе со своими данными

Мне нужно скопировать мою базу данных Mongo вместе со своими данными. Я пробовал

db.copyDatabase( "Old_db", "new_db", "localhost" )

Но проблема в том, что он копирует только пустой db, а не предыдущие данные.

4b9b3361

Ответ 1

Вы можете использовать copydb или clone или их помощники copyDatabase() или cloneDatabase(), но есть некоторые соображения:

http://docs.mongodb.org/v2.2/tutorial/copy-databases-between-instances/#considerations

Возможно, вы вызываете некоторые из них.

Я только что протестировал

db.copyDatabase("test","testCopy","127.0.0.1") 

и он отлично работал.

Сообщите нам, если у вас есть успех.

Ответ 2

Фев 2019

поскольку db.copyDatabase() устарела в v4.0, вы должны использовать вместо этого mongodump и mongorestore:

mongodump 
    --host <source host:port> 
    --ssl 
    --username <username> 
    --password <password> 
    --authenticationDatabase admin 
    --db <sourceDbName> 
    --collection <collection-name>

mongodump dump/<sourceDbName> по умолчанию экспортирует всю базу данных в локальную папку с именем dump/<sourceDbName>, а затем использует команду mongorestore для импорта в целевую базу данных:

mongorestore 
    --host <target host:port> 
    --ssl 
    --username <username> 
    --password <password> 
    --authenticationDatabase admin 
    --db <targetDbName>
    --collection <collection-name>
    <dump folder/file>

Примеры:

# backup the whole db (mydb-old):
mongodump -h Cluster0-shard-0/sample-shard-00-00-fvru1.mongodb.net:27017 \
--ssl -u user1 -p 123123 --authenticationDatabase admin \
-d mydb-old

# backup only one collection (mydb-old.users):
mongodump -h Cluster0-shard-0/sample-shard-00-00-fvru1.mongodb.net:27017 \
--ssl -u user1 -p 123123 --authenticationDatabase admin \
-d mydb-old -c users

# restore the whole db (mydb-old) to mydb-new:
mongorestore -h Cluster0-shard-0/sample-shard-00-00-fvru1.mongodb.net:27017 \
--ssl -u user1 -p 123123 --authenticationDatabase admin \
-d mydb-new dump/mydb-old

# restore only one collection (mydb-old.users) to mydb-new.users:
mongorestore -h Cluster0-shard-0/sample-shard-00-00-fvru1.mongodb.net:27017 \
--ssl -u user1 -p 123123 --authenticationDatabase admin \
-d mydb-new -c users dump/mydb-old/users.bson

Узнать больше:

Ответ 3

Если вам необходимо пройти аутентификацию:

db.copyDatabase('crm', 'crm_copy', 'localhost', 'admin', '123456')

Ответ 4

Я только что скопировал файл data/db со стороны сотрудника, и он отлично работал. Я предполагаю, что это хорошая идея, чтобы закрыть все соединения /mongod, прежде чем делать это.

Ответ 5

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

Ответ 6

Это было ясно упомянуто в документах mongo (сейчас не рекомендуется, это если вы используете версию до 4.0): - https://docs.mongodb.com/manual/reference/method/db.copyDatabase/#db.copyDatabase

Чтобы скопировать в том же экземпляре Mongod, используйте

Следующая операция копирует базу данных с именем records в базу данных с именем archive_records:

db.copyDatabase('records', 'archive_records')

Скопируйте базу данных из экземпляров mongod, которые обеспечивают аутентификацию:

Следующая операция копирует базу данных с именем report из экземпляра mongod, который работает на example.net и обеспечивает контроль доступа и использует механизм аутентификации SCRAM-SHA-1.

db.copyDatabase(
"reporting",       // from database
"reporting_copy",  // to database
"example.net",     // from host
"reportUser",      // user on from database
"abc123",          // password for user
"SCRAM-SHA-1"      // mechanism for user
)

Ответ 7

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