最牛MongoDB灾难恢复(WiredTiger.wt文件损坏,Mongo无法启动)

当遇到MongoDB的WiredTiger.wt文件损坏导致数据库无法启动时,本文介绍了通过阅读源码直接从wt数据文件恢复数据的方法。涉及到wt文件结构分析、记录读取与snappy解压、从记录中提取bson数据以及使用bsondump解析数据的步骤,强调了重要文件备份的重要性。
摘要由CSDN通过智能技术生成

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............`.. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值