【自找麻烦】解决删除MongoDB的.wt文件导致MongoDB启动失败

【炸裂开局】

用来做转储历史数据的MongoDB由于磁盘占用100%,直接挂掉了,转储服务报错了好几天,没有加监控报警,直到今日偶然发现。

【冥思苦想】

本准备把转储服务先暂停,然后把MongoDB启动起来,先把数据导入进别的盘清理一部分空间,结果发现MongoDB此时已经起不来了。并没有去寻找启动失败的真实原因,下意识的认为是磁盘满了导致的,就想着先去清理磁盘。

【逆天操作】

此时已是周五的下午,害怕生产数据积压太多拖累服务运转,也不想搞不完拖到周末,脑抽了一下,直接用命令查找这台服务器占空间最多的文件(知道肯定是MongoDB的数据),然后挑了2个占用10多G的文件直接删除(此服务器全是转储的归档文件,从来没有用到过,少个把月的数据影响不大)。结果发现还是起不来,一通百度之后意识到启动失败的原因应该就是删除了.wt文件(事实证明确实是这个原因,具体的报错就不贴了)

【方案归纳】

百度一圈后发现解决方案可归纳为以下2点:
1、使用extundelete等工具进行恢复 
优点:可以恢复已删除的.wt文件,也就是说服务启动成功后数据不会丢。
缺点:从未用过此类工具,翻阅了下使用方式,感觉有些复杂。
2、使用某种手段,跳过删除的.wt文件,使MongoDB可以直接启动。
优点:查阅到的相关文档显示该方法很快捷。
缺点:不知道是否奏效;只搜到寥寥两三篇文章介绍该方式,且使用该方式修复后,会缺少部分数据。

【方案选择】

考虑到少一部分数据无伤大雅,加上第1种方式看起来过于复杂,我这里直接在不清楚是否奏效的情况下采用了方案2(事实证明,我赌对了)

【执行操作】

方案2使用工具:wiredtiger
【安装】
#安装bz2文件的解压工具
yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++ make
#安装wiredtiger
wget http://source.wiredtiger.com/releases/wiredtiger-3.0.0.tar.bz2
tar xvf wiredtiger-3.0.0.tar.bz2 
cd wiredtiger-3.0.0 
sudo yum install snappy-devel -y
./configure --enable-snappy
make
【使用】
1、首先找到被自己删除的.wt文件的全名,可以用history命令查看已执行的命令来找,我这里删除的两个分别是:
collection-30--7064122945266824743.wt
collection-131-3695110883197208408.wt
2、运行这段命令,查出这个collection相关联的 table
/data/wiredtiger-3.0.0/wt -v -h ./ -C "extensions=[/data/wiredtiger-3.0.0/ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R list | grep collection-131-3695110883197208408.wt
3、删除这个collection
/data/wiredtiger-3.0.0/wt -v -h ./ -C "extensions=[/data/wiredtiger-3.0.0/ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R drop collection-131-3695110883197208408
4、重启MongoDB(每个人肯定不一样)
./mongod -f /data/mongodb/mongodb-linux-x86_64-4.0.9/mongodb.conf

【参考文章】

方案1的extundelete工具使用相关文章
方案2的wiredtiger相关文章
  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值