PS:尝试修复之前,先把数据文件备份一份,免得修复过程中数据丢失

意外操作导致了mongoDB运行不了,原因是collection***.wt文件损坏

尝试 mongod --dbpath "/usr/***/****" --repair,但是会失败,具体的失败信息忘了保存了。大概就是说修复到某个库的时候,某个collection文件打不开之类的。查看了下这个collection文件大小是为0。所以估计是修复不了。但是心想,这个库我可以不修复,但是mongodb必须得运行起来啊,我还有其他数据呢,起码把数据损失降低到最少。

解决方案:

运行这段命令,查出这个collection相关联的 table

./wt -v -h /usr/***/***/db -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R list | grep collection-*****

运行之后有可能会出现下三个东西。

colgroup:collection-***
file:collection-***.wt
table:collection-***

 

但是不一定全部都有,当时我只出现了table:*******这个,但实际上我有collection-***.wt这个文件,只是它的大小为0,估计是已经识别不了了。

后面我就尝试使用下面这条语句去删除这个collection

./wt -v -h /usr/***/***/db -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R drop collection-****.wt

但是删除不成功啊,再我几次尝试后发现,原来我上面用 list 参数时,只能查到 table:对应的那条数据,所以我删除的时候不需要 到collection-***.wt  只需 collection-***即可。

./wt -v -h /usr/***/***/db -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R drop collection-****

这里删掉一个会另外两个同步删除掉的,最后删除成功了。

然后我就直接去运行一遍数据库,但提示还是不行,需要修复一次才行。

最后repair完之后,运行。奇迹出现了,启动成功!!!

顺便说下,修复的时候可以把下面两个文件删了(记得备份)

mongod.lock

_repair_incomplete
 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐