09-Mongodb异常恢复

Mongodb异常恢复

  • 服务器断点之后,启动mongodb失败,因为是容器化部署,启动失败之后docker容器一直不断重启。(注意这只是一次经验操作,仅供借鉴)

一、环境信息

  • Mongodb分片部署,只有一个分片,包括一个mongos,三个config实例,一个分片,分片由Primary,Secondary,Arbiter组成。异常情况是有一个config实例异常,Primary和Secondary都异常。
实例端口状态备注
mongos27017正常
config Primary20001正常
config Secondary20002正常
config Secondary20003异常日志提示WiredTiger.wt格式异常
Primary20011异常日志提示sizeStorer.wt格式异常
Secondary20012异常日志提示WiredTiger.wt格式异常
Arbiter20013正常

二、恢复过程

2.1 停止容器

  • 先停止Primary,Secondary和config Secondary容器

2.2 修复数据

  • 使用下面的命令尝试修复数据。
--port端口保证后面的端口保证是可以用的即可,如果不带的话默认是27017,但是27017已经被mongos占用了,因此需要指定一个可用端口
-dbpath后面跟的是数据存储路径,也就是Primary挂载在宿主机的数据路径
sudo ./mongod --port 30012  --repair  -dbpath=/data/mongodb/shard_server11/data/db
  • 如果修复正常,会出现类似下面的日志,看到修复成功的日志:

在这里插入图片描述

在这里插入图片描述

  • 修复成功之后,重新启动容器即可。按照上面的步骤依次修复Primary,Secondary和config Secondary。

2.3 修复失败

  • 如果修复过程中失败了,会出现类似下面的日志。如果是config Secondary修复失败了,那么就清除config Secondary数据路径下的文件,重新启动config Secondary容器(注意如果只有一个config Secondary故障,那么清除数据之后重启会重新从另外两个实例同步到正确的数据)

在这里插入图片描述

  • 如果是Primary修复成功但Secondary修复失败了,那么连接Primary实例的端口查询数据是否完整(我在操作过程中发现Primary数据是完整的,但是通过mongos访问就有几个表打不开,而且Secondary修复失败),
    那么就删除Secondary数据路径下面的文件,再重新启动Secondary容器,之后就可以通过mongos访问完整的数据了。(之后Secondary会从Primary同步正确的数据)

三、注意事项

  • 以上操作步骤是我的操作步骤,仅供参考,有数据丢失的风险。
停止容器:docker stop 容器Id
重启容器:docker-compose -f mongo-docker-compose.yml up -d   shard_server11(容器名,该命令不具备通用性)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值