MongoDB故障总结

**副本集状态出现RECOVERING**

mongo副本集搭建完成后从节点出现RECOVERING状态:
test:RECOVERING>
1.查看mongo的日志一直在报错复制错误的信息:
MongoDB故障总结
2.从节点登陆查看复制状态信息:很明显是在前天下午18点30的时候复制中止,找到缘由是由于关机前没关虚拟机,致使mongo异常退出,复制失败
MongoDB故障总结
3.上网搜了一下资料,须要手动同步数据,mongo官网给了两种办法
1) 自动同步,最简单也是操做最少的一种办法,先把mongodb中止服务,而后把mongodb的数据目录移走,新建一个mongo的数据目录,再起服务,这样他就会自动去追赶主库的数据,缺点是恢复时间比较久,根据数据量来决定
2) 从另一个成员拷贝数据文件, 中止备库,从primary库copy数据文件,在copy的时候,注意要把local库也复制过来,复制不能采用mongodump,仅仅只容许使用快照备份数据文件
分析了上面的2种方式,第一种方式,清空数据目录重启mongodb实例让mongodb初始化同步数据,操做简单,可是恢复时间比较长,须要花费更多时间替换数据,第二种方式从副本集合的另一个成员拷贝数据目录后重启mongodb实例,这个恢复过程速度快可是须要比较多的手工操做步骤,为了方便和简单,我这里用第一种方式
故障节点再此以前先把mongodb的服务给停了,进去mongo里use admin库再输入db.shutdownServer()
MongoDB故障总结
四、个人mongo的数据放在这个文件夹里,如今把原来的数据改个名字 新建一个mongo的数据文件夹,要知道本身的数据文件夹放哪里能够看/etc/mongod.conf文件
root@backup:/data # mv mongo mongo.bak #给旧的mongo数据文件进行更名
查看一下新文件夹, mongodb副本集已经在向主节点同步数据了
root@backup:/data # mkdir mongo #建立新的mongo文件夹
MongoDB故障总结
rset:STARTUP2> rs.status(); #查看一下集群信息
发现刚才重启的这台状态已经变成startup2了,接下来的就是等待了
等了大概一天同步数据,登上去看看
rset:PRIMARY> rs.status()mongodb

发现这个节点的数据已经恢复了,并加入了集群里,其余的副本集若是也是RECOVERING也要作相同的操做,总的来讲就是中止服务,而后移走老的数据文件夹,新建新的文件夹,再起服务等他本身同步,把oplog调整大一点,防止之后又出现这种状况
测试是否同步成功:去主节点插入一条数据在从节点查看复制状态:markdown

部分摘自51ctoide