mongodb数据备份用mongorestore恢复后没有数据


两台机子,一台机子是windows server 2008,另一台机子centos 6.4,要把位于windows 机子上的数据备份出来,然后还原到centos上。

假设windows server 2008的机器ip为,192.168.1.59,centos机器的ip为192.168.1.58.两台机子mongodb的访问端口同为27117.两台数据用同样的用户名和密码(实际上可以不同)。操作都在windows server 2008机器的cmd命令行下运行。

首先备份数据:
mongodump -h 192.168.1.59:27117  -u mongoadmin -p 123456 --authenticationDatabase webshop -d webshop  -o E:\mongobak\databak

数据备份出来后再用

mongorestore -h 192.168.1.58:27117 -u mongoadmin -p 123456 -d webshop --drop --directoryperdb E:\mongobak\databak\webshop

把备份出来的数据还原到centos那台机器上。

用mongo 192.168.1.58:27117  -u mongoadmin -p 123456 --authenticationDatabase webshop访问数据库,db.products.find(),发现products集合中没有任何文档。

最后分析后发现了原因是用户mongoadmin在192.168.1.58 webshop的数据库上没有写入权限,用如下命令:

use webshop;
db.grantRolesToUser(
  "mongoadmin",
  [
    { role: "readWrite", db: "webshop" }
   
  ]
)

给mongoadmin读写权限角色。
再次用mongorestore -h 192.168.1.58:27117 -u mongoadmin -p 123456 -d webshop --drop --directoryperdb E:\mongobak\databak\webshop还原数据,再次用mongo 192.168.1.58:27117  -u mongoadmin -p 123456 --authenticationDatabase webshop,访问webshop数据库,db.products.find(),发现products集合中已有文档。


总结:数据库备份用户要有dbAdmin角色权限,数据还原用户要有dbAdmin,readWrite角色权限。

京ICP备14008139号-1