如何将数据库从一台MongoDB服务器复制到另一台?
我在不同的服务器上有两个MongoDB,都以如何将数据库从一台MongoDB服务器复制到另一台?,mongodb,Mongodb,我在不同的服务器上有两个MongoDB,都以--auth开头。现在我想把数据库从一台服务器复制到另一台服务器 > mongo > use admin > db.copyDatabase("mydb","mydb","another_server") 它表明: { "errmsg" : "", "ok" : 0 } 以及: 似乎没有错误,但复制不成功。正确的命令是什么?如果您使用的是--auth,则需要在其中包含用户名/密码 此外,运行命令时,您必须位于“目标”服务器上 db
--auth
开头。现在我想把数据库从一台服务器复制到另一台服务器
> mongo
> use admin
> db.copyDatabase("mydb","mydb","another_server")
它表明:
{ "errmsg" : "", "ok" : 0 }
以及:
似乎没有错误,但复制不成功。正确的命令是什么?如果您使用的是--auth,则需要在其中包含用户名/密码
此外,运行命令时,您必须位于“目标”服务器上
db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>);
db.copyDatabase(,);
如果所有这些都不起作用,您可能想尝试创建一个要复制的数据库的从机…除了Justin Jenkins的答案之外,请记住,如果您没有将mongodb暴露于网络(仅限本地主机),您也可以使用ssh隧道 我使用屏幕在“任务”之间切换。为了方便起见,ssh隧道和mongo在单独的屏幕选项卡中执行 步骤1:创建一个隧道
ssh username@yourdomainOrIP -L 27018:localhost:27017
...Enter your password
步骤2:
mongo
use admin
db.copyDatabase(<fromdb>,<todb>,"localhost:27018",<username>,<password)
mongo
使用管理员
db.copyDatabase(,,“localhost:27018”,,从Mongo
version3.2
开始,您可以使用mongodump/mongorestore
:
mongodump --host <from_host> --db <from_db> --archive | mongorestore --host <to_host> --archive
mongodump--host--db--archive | mongorestore--host--archive
有关更多信息,请访问:
要使远程mongo可访问,您可以创建到它的ssh隧道:
创建到远程mongodb服务器的隧道,并通过端口27117将其隧道到本地客户端
ssh -fN -L 27117:localhost:27017 <remote_host>
ssh-fN-L 27117:localhost:27017
在这种情况下,要在要还原到的本地计算机上运行的命令可以是:
mongodump --port 27117 --db <from_db> --archive | mongorestore --archive
mongodump--端口27117--数据库--存档| mongorestore--存档
除了Mike Shauneu的答案之外,如果目标服务器上的数据库名称与源服务器上的数据库名称不同,则需要重写名称空间。结合身份验证,我使用--uri
选项实现了这一点,该选项需要最新的mongo版本(>3.4.6):
下面是我从Ubuntu服务器复制到另一个Ubuntu服务器的工作,这两个服务器都运行MongoDB v4+:
应在要还原数据库的服务器上执行以下命令:
[可选]您可以按以下方式检查已还原的数据库:
检查列表中是否存在您的数据库。提到的用户名和密码是数据库而不是主机名PS:我犯了这个错误,因此提到它:)谢谢!这非常简单。就我的情况而言,我没有用户名或密码,因此我必须关闭这些参数。我是否可以将数据库复制到mongo的datafolder中?@eranotzap您可以关闭一个数据库,复制数据文件并将其传输到另一个服务器(您可能也希望先关闭该服务器)但在我看来,使用copyDatabase不仅简单得多(无需关机/文件复制/传输)。。。但它也更安全,因为它的工作原理更像是复制到从机。谢谢@JustinJenkins有时数据库非常大,我如何知道哪些文件属于哪个数据库?只是为了向那些以前从未创建过SSH隧道的人澄清一下这些说明:27018这里有一个未使用的任意本地端口。为确保不使用,请使用“lsof-ti:9000”。如果返回进程,请使用lsof查找未使用的端口。此答案中的第二个27017端口是mongo正在运行的端口,位于您从中复制的远程主机上。为了确保这是正确的,请登录到远程主机并使用“lsof-iTCP-sTCP:LISTEN | grep mongo”确认mongo正在该端口上运行。这实际上是一个聪明的技巧,将转储传输到还原。尽管它可以与小型dbs一起工作,否则您需要一个非常可靠的连接,任何断开的连接都会导致恢复失败。
mongodump --port 27117 --db <from_db> --archive | mongorestore --archive
mongodump --uri="mongodb://$sourceUser:$sourcePwd@$sourceHost/$sourceDb" --gzip --archive | mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive
ssh -fN -L 27018:127.0.0.1:27017 <remote_host_ip>
mongodump --port 27018 --db <remote_db_name> --username <remote_db_username> --password <remote_db_password> --archive | mongorestore --username <destination_db_username> --password <destination_db_password> --archive
mongo --authenticationDatabase "admin" -u <destination_db_username> -p
show dbs