45

我需要复制我的 Mongo 数据库及其数据。我努力了

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

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

4

7 回答 7

58

2019 年 2 月

由于db.copyDatabase()在 v4.0 中已弃用,您应该使用mongodumpandmongorestore代替:

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

了解更多:

于 2019-02-21T20:10:35.510 回答
56

您可以使用 copydb 或 clone,或它们的助手copyDatabase()cloneDatabase(),但有一些注意事项:

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

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

我刚测试

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

它工作得很好。

让我们知道您是否成功。

于 2013-03-27T00:06:16.813 回答
6

如果需要认证:

db.copyDatabase('crm', 'crm_copy', 'localhost', 'admin', '123456')
于 2016-01-20T04:11:08.740 回答
3

对于 MongoDB v4.2+:

较旧copyDatabasecloneDatabase已弃用。您应该使用 and 的组合来mongodump代替mongorestore

例子:

源数据库: [名称= olddb(主机= localhost,端口= 27017)]

目的地。DB: [名称= newdb (主机= localhost,端口= 27017)]

方法 1 - 通过使用存档文件:

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

mongodump --archive="mongodump-old-db" --db=olddb --host=localhost --port=27017

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

mongorestore --archive="mongodump-old-db" --nsFrom='olddb.*' --nsTo='newdb.*' --host=localhost --port=27017

方法 2 - 通过使用标准输出流:

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

赶紧跑:

mongodump --archive --db=olddb --host=localhost --port=27017 | mongorestore --archive  --nsFrom='olddb.*' --nsTo='newdb.*' --host=localhost --port=27017

提示:您可以根据需要包含其他选项,例如 uri ( --uri ) 或主机 ( --host )、端口 ( --port )、用户名 ( --username )、密码 ( --password ) 或其他选项.

资料来源:有关该主题的官方 MongoDB 文档

于 2021-01-17T21:59:03.200 回答
2

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

于 2015-07-01T19:17:22.340 回答
0

I would recommend to have a look at the daemon(s). It happened to me that I had to reinitialize it/them (in my case I had a replica set)

于 2016-11-25T15:51:42.160 回答
-5

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

于 2016-05-06T13:49:37.580 回答