Мне нужно скопировать мою базу данных Mongo вместе со своими данными. Я пробовал
db.copyDatabase( "Old_db", "new_db", "localhost" )
Но проблема в том, что он копирует только пустой db, а не предыдущие данные.
Мне нужно скопировать мою базу данных Mongo вместе со своими данными. Я пробовал
db.copyDatabase( "Old_db", "new_db", "localhost" )
Но проблема в том, что он копирует только пустой db, а не предыдущие данные.
Вы можете использовать copydb или clone или их помощники copyDatabase()
или cloneDatabase()
, но есть некоторые соображения:
http://docs.mongodb.org/v2.2/tutorial/copy-databases-between-instances/#considerations
Возможно, вы вызываете некоторые из них.
Я только что протестировал
db.copyDatabase("test","testCopy","127.0.0.1")
и он отлично работал.
Сообщите нам, если у вас есть успех.
Фев 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
Узнать больше:
Если вам необходимо пройти аутентификацию:
db.copyDatabase('crm', 'crm_copy', 'localhost', 'admin', '123456')
Я только что скопировал файл data/db со стороны сотрудника, и он отлично работал. Я предполагаю, что это хорошая идея, чтобы закрыть все соединения /mongod, прежде чем делать это.
Я бы рекомендовал посмотреть на демон (ы). Случилось со мной, что мне пришлось повторно инициализировать его/их (в моем случае у меня был набор реплик)
Это было ясно упомянуто в документах 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
)
использование MongoChef очень просто сделать, создать локальную локальную базу данных, затем скопировать коллекцию источника, а затем вернуться к локальному вновь созданному db.