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 0705 0000 0060 0000 p............`..