目录

MongoDB数据丢失的场景

MongoDB存储结构分析

MongoDB数据恢复代码实现

MongoDB数据恢复实践

MongoDB数据恢复近期案例

技术支持


MongoDB数据丢失的场景

MongoDB是一款NoSQL-文档存储 数据库,目前没有商用恢复软件或工具。

MongoDB出现SQL命令误删除(整个库、集合、文件)、操作系统rm误删除文件、勒索病毒恶意破坏等,或者在扩容、均衡等操作出现异常,都可能导致数据无法访问,需要数据恢复。


MongoDB存储结构分析

  MongoDB 的逻辑结构是一种层次结构。主要由:文档(document)、集合(collection)、数据库(database)这三部分组成:

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

MongoDB的数据存储db文件中,此文件结构如下:

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

当db文件被物理被删除删除时,为了达到最大化数据恢复,需要从Document的级别恢复。以下为ns文件和db文件的关键结构信息:

class DiskLoc {

    int _a;  // 数据文件编号,如mydb.0编号为0

    int ofs; // 文件内部偏移

 };

每个数据文件包含一个固定长度头部DataFileHeader

 class DataFileHeader {

        DataFileVersion version;

        int fileLength;

        DiskLoc unused;

        int unusedLength;

        DiskLoc freeListStart;

        DiskLoc freeListEnd;

        char reserve[];

 };

struct Extent {

        unsigned magic;  //0x4443424100000000

        uint32 myLoc;   // extent自身位置,小端序,4字节

        /* 前一个/后一个 extent位置指针 */

        DiskLoc xnext;

        DiskLoc xprev;

        int length;  // extent总长度

        DiskLoc firstRecord;  // extent内第一个record位置指针

        DiskLoc lastRecord;   // extent内最后一个record位置指针

        char _extentData[4];  // extent数据

};

class Record {

        int _lengthWithHeaders;  // Record长度

        int _extentOfs;          // Record所在的extent位置指针

        int _nextOfs;                  // 前一个Record位置信息

        int _prevOfs;                  // 后一个Record位置信息

        char _data[4];            // Record数据

};


MongoDB数据恢复代码实现

通过解析MongoDB源代码,及对应数据库文件结构,我们编写了MongoDB数据恢复工具,核心代码如下:

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

打开源文件代码:仅申请READ权限,以确保对源文件是只读访问,杜绝二次破坏!

 

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操


MongoDB数据恢复实践

  • 将Data-Unit_MongoDB_Restore.exe放在有足够可用空间的目录下。如果需要从某分区中搜索碎片,如D盘,则一定不能将工具放在D盘,切记!
  • 运行恢复工具,如果提示缺少dll,请安装vc_redist.2015x64.exe

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

支持以下4种数据源:

  • 裸磁盘(整个磁盘):直接输入磁盘序号,如下图,以管理员权限运行工具,输入数字2,则扫描磁盘2。注意windows的磁盘从0开始编号

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

  • 分区:以管理员身份运行工具,输入盘符,如D
  • 镜像文件(裸磁盘或分区的镜像文件,支持任意文件系统,如ext3、ext4、XFS、NTFS、VMFS5、VMFS6、vmdk、VHD文件,等等):用鼠标,直接将文件拖入cmd窗口即可
  • 残缺的db文件:用鼠标,直接将文件拖入cmd窗口即可
  • 按下回车开始扫描,Data-Unit_MongoDB_Restore自动将找到的数据输出到MongoDB_restor_file目录

MongoDB数据恢复近期案例

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

 


技术支持

温馨提示:如重要数据丢失,建议在行动前咨询专业工程师,以免数据遭到二次破坏。

MongoDB 误删、清库、勒索病毒 无oplog日志 数据库恢复实操

企业级恢复支持:https://shop65444600.taobao.com

官方网站:http://www.data-unit.com

相关文章:

  • 2021-06-02
  • 2021-04-11
  • 2021-05-23
  • 2021-04-04
  • 2021-11-05
  • 2021-11-02
  • 2021-07-20
猜你喜欢
  • 2021-09-26
  • 2018-09-27
  • 2021-11-07
  • 2021-04-23
  • 2021-05-16
  • 2021-12-02
  • 2021-12-01
相关资源
相似解决方案