好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

mongodb dump and restore

只迁移一个 cm库,目标库是2.4.8版本,原库是2.4.6版本,所以采用了热备的方式来迁移。 官方文档上写得非常简单的说: mongodump –host mongodb.example.net –port 27017 mongorestore –port 但是真做起来各种坑,主要还是用户权限的问题。

最开始,cm库里面只有一个用户cm, 它的权限是readWrite和dbAdmin, 所以导出时,还要指定另外一个参数: –authenticationDatabase cm 表示此用户在cm库中,不在admin库中。。。

此用户有数据的读写权限,但是却没有db.system.users表的读取权限,所以在导出users表时提示没有权限。

gg了一下,原来需要userAdmin权限。。这个权限未免太高了点吧。

于是添加一个dump用户: use cm; db.addUser( { user: [dump],pwd: [123456],roles: [ "readWrite", "userAdmin" ]} )

用以下命令很快就完成了导出: ./bin/mongodump -u dump -p –authenticationDatabase cm –db cm –out /data/dump

导入的时候呢? 目标库只在admin库中有一个root用户,权限是userAdminAnyDatabase,

尝试用root用户导入,失败。。。 难道也要在cm库中创建一个具有readWrite和userAdmin的dump用户? 那在导入的时候,会不会覆盖目标库的system.users表?值得一测。 于是在目标库创建了用户dump,密码是111111,与原库的dump密码不同。 导入: ./bin/mongorestore -u dump -p –authenticationDatabase cm –db cm /home/zhaokunyao/dump/cm

会有提示: Tue Nov 19 20:03:10.213 warning: Restoring to cm.system.users without dropping. Restored data will be inserted without raising errors; check your server log server log木有和user表有关的信息…

最终的结果是: 目标库的users表和源库的users表合并了。 源库的用户都导入到了users表,除了dump用户。 目标库的dump用户密码仍旧是111111。 注:db.system.users表上有unique key(user)

最后把二个库的dump用户删除,收工,共7分钟。

在迁移的过程中还发现一个小问题: 按照正常方式安装mongdb,连接之后报以下Warning:

Mon Nov 18 17:36:26.641 [initandlisten] ** WARNING: You are running on a NUMA machine. Mon Nov 18 17:36:26.641 [initandlisten] ** We suggest launching mongod like this to avoid performance problems: Mon Nov 18 17:36:26.641 [initandlisten] ** numactl –interleave=all mongod [other options] 要求用 numactl –interleave=all mongod的方式来启动mongod.

请问各位大大,NUMA对mysqld有没有影响? 对其它软件呢?  

查看更多关于mongodb dump and restore的详细内容...

  阅读:46次