复制/克隆mongodb数据库及其数据

时间:2013-02-13 05:04:13

标签: mongodb

我需要复制我的Mongo数据库及其数据。我试过了

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

但问题是它只复制空白数据库,而不是以前的数据。

8 个答案:

答案 0 :(得分:45)

您可以使用copydb或克隆,或其助手copyDatabase()cloneDatabase(),但有一些注意事项:

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

也许你正在触发其中一些。

我刚刚测试了

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

它完美无缺。

如果您取得成功,请告诉我们。

答案 1 :(得分:6)

2019年2月

由于db.copyDatabase()在v4.0中已被弃用,因此您应该改用mongodumpmongorestore

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

mongodump命令将默认情况下将整个数据库导出到名为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-xyz.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-xyz.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-xyz.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-xyz.mongodb.net:27017 \
--ssl -u user1 -p 123123 --authenticationDatabase admin \
-d mydb-new -c users dump/mydb-old/users.bson

了解更多信息

答案 2 :(得分:5)

如果您需要进行身份验证:

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

答案 3 :(得分:2)

我刚刚从同事那里复制了数据/ db文件,它运行得很好。我想在这之前关闭任何连接/ mongod是个好主意。

答案 4 :(得分:1)

对于 MongoDB v4.2+:

旧版 copyDatabasecloneDatabase 已弃用:

<块引用>

4.2 版本开始,MongoDB 删除了已弃用的 copydb 命令和 clone 命令。

从现在开始,复制From [ test 数据库(本地实例默认端口27017) ],

:[ examples 数据库(本地实例默认端口 27017 ) ] 你应该:

通过使用存档文件:

1- 运行 mongodump 将 test 数据库转储到存档 mongodump-test-db

mongodump --archive="mongodump-test-db" --db=test

2- 使用 --nsFrom--nsTo 运行 mongorestore 以从存档中恢复(更改数据库名称):

mongorestore --archive="mongodump-test-db" --nsFrom='test.*' --nsTo='examples.*'

或者,通过使用标准输出流:

您可以将 test 数据库 mongodump 到标准输出流并通过管道传输到 mongorestore,而不是使用存档文件。

只需运行:

mongodump --archive --db=test | mongorestore --archive  --nsFrom='test.*' --nsTo='examples.*'

提示:您可以根据需要添加其他选项,例如 uri (--uri) 或主机 (--host) 、端口 (--port)、用户名 (--username)、密码 (--password) 或 other options。< /p>

来源:Official MongoDB Docs regarding the subject

答案 5 :(得分:0)

我建议看看守护进程。碰巧我,我不得不重新初始化它/他们(在我的情况下,我有一个副本集)

答案 6 :(得分:-1)

这在mongo文档中已经明确提及(现已弃用,这是如果您使用的是4.0之前的版本):-https://docs.mongodb.com/manual/reference/method/db.copyDatabase/#db.copyDatabase

要在同一mongod实例中复制,请使用

以下操作将名为records的数据库复制到名为archive_records的数据库中:

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

从执行身份验证的mongod实例复制数据库:

以下操作从在example.net上运行的mongod实例复制一个名为“报告”的数据库,并实施访问控制并使用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 :(得分:-2)

使用MongoChef非常容易,在本地创建相同的数据库,然后复制源的集合,然后过去到本地新创建的数据库。