我在不同的服务器上有两个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)
如果所有这些都不起作用,您可能想要尝试创建要复制的数据库的从属...
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)
除了 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)
归档时间: |
|
查看次数: |
70838 次 |
最近记录: |