WiredTiger.wt文件是mongoDB的元数据文件,存储了其他数据库表的元数据信息。
只要不使用kill -9杀进程,一般不会导致MongoDB出问题(Mongo本身有对kill做处理),但是程序总有跑偏的时候,也许哪次服务器重启或者遇到断电之类的,没准就会导致数据库文件损坏。
稳妥的方法是使用kill -2 pid去关闭mongod,也就是当mongod进程接受到关闭指令后会等待当前运行操作或文件分配等操作完毕后,关闭所有打开的连接,并将缓存的数据刷新到磁盘后才正式关闭。
当然一般的异常关闭后启动不了时可能也就是删除一下lock、pid文件或者tmp下的sock文件即可搞定,根本不是什么问题,偶尔的数据异常--repair也就可以了(数据量大要建一堆索引的时候慎用,等很长时间给你抛出一个修复失败是最容易让人崩溃的……),而且其实开启了journal的情况下非正常关闭mongo时还有比较好用的数据文件自动修复功能,MongoDB的可靠性其实还不错。
MongoDB使用建议:
对重要数据库所在机器操作前一定要提前备份一下,把万万没想到的损失降到最低;
除非真的不care数据的高可用性,不要随便关journal;
单台机器上有多个库的话最好在配置文件中设置下directoryPerDB:true,让每个库有一个单独文件夹;
有富余机器的话尽量做一下复制集,而部署跑单机。
MongoDB的底层存储是由WiredTiger负责的,其数据文件也是.wt格式。
既然如此,我们就有可能不通过MongoDB服务,而是直接用wt工具从数据文件中恢复数据。
从损坏的wt文件中恢复出WiredTiger集合
http://dev.guanghe.tv/2016/06/recovering-a-wiredtiger-collection-from-a-corrupt-wt-file.html
Recovering a WiredTiger collection from a corrupt MongoDB installation
https://www.alexbevi.com/blog/2016/02/10/recovering-a-wiredtiger-collection-from-a-corrupt-mongodb-installation/
使用WT工具恢复MongoDB数据
https://mongoing.com/archives/81301
https://juejin.cn/post/7041078183994589215
网友评论