本文章主要讲解通过物理备份文件恢复mongodb副本集,也适用于mongodb单节点实例转变成副本集实例,转换过程中使用单节点的物理备份即可。
前提
- 一个mongodb副本集实例
- 一个完成的物理备份文件(mongodb数据目录的完整备份)
举例:1主1从1hidden组成的副本集,名字是myrs
(也适用于其他类型的副本集恢复)
节点 | 优先级 | 是否hidden |
---|---|---|
192.168.0.11 (node1) | 3 | 否 |
192.168.0.12 (node2) | 1 | 否 |
192.168.0.13 (node3) | 0 | 是 |
恢复步骤
-
先恢复primary节点node1
-
copy 物理备份文件到node1的数据目录:/data/db。
-
指定数据目录启动mongodb服务:
mongod --dbpath /data/db
(这里不要用配置文件启动,只需要mongod加参数启动即可) -
令起一个终端连接,用mongo shell 客户端登录mongodb,并drop掉local数据库(此时不需要任何的用户认证,直接命令行输入:
mongo
即可),
use local;
db.dropDatabase();
-
关闭第2步启动的mongodb服务,重新以副本集模式启动mongod服务
mongod --dbpath /data/db --replSet myrs
-
用mongo shell登录副本集,并执行副本集初始化命令(注意_id要和配置文件中的replication.replSetName一致)
rs.initiate( { _id : "myrs", members: [ { _id : 0, host : "192.168.0.11:27017",priority:3} ] })
-
关闭node1的mongod服务
-
-
恢复secondary节点node2,node3
- 清空node2,node3 mongod的数据目录
- 将primary节点的数据copy到node2,node3的数据目录中
- 启动node2,node3的mongod服务,按原来的配置文件启动mongod服务(注意配置文件中的replication.replSetName要和主节点的一致)
-
启动primary节点服务(指定配置文件启动),并将secondary节点加入到集群中
rs.add( { host: "192.168.0.12:27017", priority: 1}) rs.add( { host: "192.168.0.13:27017", priority: 0, hidden: true })
-
检查mongodb副本集的状态
rs.status()