2011-03-31 51 views
44

我在不同的服务器上有两个mongodbs,都以--auth开头。现在我想将一个数据库从一台服务器复制到另一台服务器。如何将数据库从一个MongoDB服务器复制到另一个?

> mongo 
> use admin 
> db.copyDatabase("mydb","mydb","another_server") 

它显示:

{ "errmsg" : "", "ok" : 0 } 

和:

> db.getLastError() 
null 

似乎没有错误,但复制是没有成功。什么是正确的命令使用?

回答

73

如果您正在使用--auth,则需要包括您的用户名/在那里密码...

你也必须“目标”的服务器上,当你运行该命令。

db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>); 

如果所有不工作,你可能想尝试的东西,如创建要复制数据库的奴隶......

+0

谢谢你这么多,作品〜 – Freewind 2011-03-31 05:02:02

+2

提到的用户名和密码是用于数据库而不是主机名称 PS:我犯了这个错误,因此提到它:) – shammerw0w 2014-04-21 18:36:05

+1

非常感谢,非常有帮助的回答:) – 2016-07-08 15:08:36

16

除了贾斯汀詹金斯记住答案你也可以使用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) 
+2

只是为了澄清这些说明,对于那些从未创建过SSH隧道的人来说:27018这里是一个不使用的任意本地端口。为确保不使用,请使用“lsof -ti:9000”。如果进程返回,请使用lsof来查找未使用的端口。此答案中的第二个27017端口是mongo端口正在运行,位于正在复制的远程主机上。为确保这是正确的,请登录到远程主机并确认mongo正在此端口上运行:“lsof -iTCP -sTCP:LISTEN | grep mongo”。 – huwiler 2017-03-02 16:04:08

11

3.2Mongo版本开始,你可以通过使用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隧道到它:

ssh -fN -L 27017:localhost:27117 <remote_host> 

在这种情况下,命令可能是:

mongodump --port 27117 --db <from_db> --archive | mongorestore --archive 
相关问题