MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操

目录

MongoDB数据丢失的场景

MongoDB存储结构分析

MongoDB数据恢复代码实现

MongoDB数据恢复步骤

MongoDB数据恢复近期案例1

MongoDB数据恢复近期案例2

技术支持



MongoDB数据丢失的场景

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

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


MongoDB存储结构分析

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

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第1张图片

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

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第2张图片MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第3张图片

当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;

        uint32 myLoc;   

        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 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第4张图片

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

 

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第5张图片


MongoDB数据恢复步骤

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

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第6张图片

支持以下4种数据源:

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

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第7张图片

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

MongoDB数据恢复近期案例1

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第8张图片

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第9张图片

MongoDB数据恢复近期案例2

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第10张图片MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第11张图片

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第12张图片MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第13张图片


技术支持

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

MongoDB 数据库恢复-误删除数据文件、delete、勒索病毒破坏 无oplog日志 恢复实操_第14张图片

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

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

你可能感兴趣的:(数据恢复)