如何将数据库从一个MongoDB服务器复制到另一个服务器?

Fre*_*ind 54 mongodb

我在不同的服务器上有两个mongodbs,两者都是以--auth.现在我想将数据库从一个服务器复制到另一个服务器.

> mongo
> use admin
> db.copyDatabase("mydb","mydb","another_server")
Run Code Online (Sandbox Code Playgroud)

表明:

{ "errmsg" : "", "ok" : 0 }
Run Code Online (Sandbox Code Playgroud)

和:

> db.getLastError()
null
Run Code Online (Sandbox Code Playgroud)

似乎没有错误,但副本不成功.什么是正确的命令使用?

Jus*_*ins 87

如果您使用的是--auth,则需要在其中包含您的用户名/密码...

此外,运行命令时,您必须位于"目标"服务器上.

db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>);
Run Code Online (Sandbox Code Playgroud)

如果所有这些都不起作用,您可能想要尝试创建要复制的数据库的从属...

  • 提到的用户名和密码是针对数据库而不是主机名PS:我犯了这个错误因此提到它:) (3认同)
  • 收到“警告:db.copyDatabase 仅适用于 MongoDB 4.0 及更低版本。请参阅http://dochub.mongodb.org/core/4.2-copydb-clone` (3认同)

Mik*_*neu 28

Mongo版本开始,3.2您可以使用以下命令mongodump/mongorestore:

mongodump  --host <from_host> --db <from_db> --archive | mongorestore --host <to_host> --archive
Run Code Online (Sandbox Code Playgroud)

其他信息可在以下网址找到:

https://docs.mongodb.com/manual/reference/program/mongodump/ https://docs.mongodb.com/manual/reference/program/mongorestore/

要使远程mongo可达,您可以创建ssh隧道:

ssh -fN -L 27117:localhost:27017 <remote_host> 
Run Code Online (Sandbox Code Playgroud)

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

mongodump  --port 27117 --db <from_db> --archive | mongorestore --archive
Run Code Online (Sandbox Code Playgroud)


小智 22

除了贾斯汀·詹金斯的答案请记住,您还可以使用SSH隧道,如果你没有MongoDB的暴露在网络(本地主机只)

我使用屏幕在"任务"之间切换.为方便起见,ssh隧道和mongo在单独的屏幕选项卡中执行.

第1步:创建一个隧道

ssh username@yourdomainOrIP -L 27018:localhost:27017
...Enter your password
Run Code Online (Sandbox Code Playgroud)

第2步 :

mongo
use admin
db.copyDatabase(<fromdb>,<todb>,"localhost:27018",<username>,<password)
Run Code Online (Sandbox Code Playgroud)

  • 只是为那些之前从未创建过SSH隧道的人澄清这些说明:27018这里是一个未使用的任意本地端口.要确保不使用它,请使用"lsof -ti:9000".如果返回了进程,请使用lsof查找未使用的端口.此答案中的第二个27017端口是正在运行的mongo端口,在您要复制的远程主机上.要确保这是正确的,请登录到远程主机并确认mongo正在此端口上运行:"lsof -iTCP -sTCP:LISTEN | grep mongo". (6认同)

use*_*520 9

除了 Mike Shauneu 的回答之外,如果目标服务器上的数据库名称与源服务器上的数据库名称不同,则需要重写命名空间。结合身份验证,我使用该--uri选项使其工作,该选项需要最近的 mongo 版本(> 3.4.6):

mongodump --uri="mongodb://$sourceUser:$sourcePwd@$sourceHost/$sourceDb" --gzip --archive | mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive
Run Code Online (Sandbox Code Playgroud)