一聚教程网:一个值得你收藏的教程网站

热门教程

mongodb数据库备份与恢复详解

时间:2022-06-29 10:37:28 编辑:袖梨 来源:一聚教程网

只迁移一个 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.

热门栏目