最牛MongoDB灾难恢复(WiredTiger.wt文件损坏,Mongo无法启动)
WiredTiger.wt文件是mongoDB的元数据文件,存储了其他数据库表的元数据信息。笔者最近遇到了WiredTiger.wt文件损坏的情况,MongoDB无法启动,数据库中的重要数据危在旦夕... 一、网上大多数文章的恢复方案 - 使用wt工具对数据进行打捞 由于笔者之前没有接触过MongoDB,对其知之甚少,只能参考网上的文章来试图恢复数据。看了下网上的文章,大多是说通过wt工具来打捞数据。然而wt工具打捞数据,需要WiredTiger.wt文件是完好可用,并不适用于笔者遇到的情形。 二、源码面前,了无秘密 - 读源码,直接从wt数据文件恢复数据 网上的恢复方案不对症,无奈只能另寻他法。 通过阅读wiredtiger的代码发现,wt数据文件中,数据库记录以bson格式存储的,并默认通过snappy进行了压缩,数据默认没有进行加密 1. wt数据文件结构分析 使用vim的十六进制模式观察collection*.wt数据文件发现: wt数据文件的前4096字节是该wt文件的元数据信息 wt数据文件从4096开始存储数据库记录 wt数据文件的记录对齐4096 把视线聚焦到单独的某个记录上: 0001000: 0000 0000 0000 0000 0100 0000 0000 0000 ................ 0001010: 70e2 0000 0200 0000