目錄
MongoDB數據丟失的場景
MongoDB是一款NoSQL-文檔存儲 數據庫,目前沒有商用恢復軟件或工具。
MongoDB出現SQL命令誤刪除(整個庫、集合、文件)、操作系統rm誤刪除文件、勒索病毒惡意破壞等,或者在擴容、均衡等操作出現異常,都可能導致數據無法訪問,需要數據恢復。
MongoDB存儲結構分析
MongoDB 的邏輯結構是一種層次結構。主要由:文檔(document)、集合(collection)、數據庫(database)這三部分組成:
MongoDB的數據存儲db文件中,此文件結構如下:
當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數據恢復工具,核心代碼如下:
打開源文件代碼:申請READONLY只讀權限,確保對源文件是隻讀訪問,杜絕二次破壞!
MongoDB數據恢復步驟
- 將Data-Unit_MongoDB_Restore.exe放在有足夠可用空間的目錄下。如果需要從某分區中搜索碎片,如D盤,則一定不能將工具放在D盤,切記!
- 運行恢復工具,如果提示缺少dll,請安裝vc_redist.2015x64.exe
支持以下4種數據源:
- 裸磁盤(整個磁盤):直接輸入磁盤序號,如下圖,以管理員權限運行工具,輸入數字2,則掃描磁盤2。注意windows的磁盤從0開始編號
- 分區:以管理員身份運行工具,輸入盤符,如 D
- 鏡像文件(裸磁盤或分區的鏡像文件,支持任意文件系統,如ext3、ext4、XFS、NTFS、VMFS5、VMFS6、vmdk、VHD文件,等等):用鼠標,直接將文件拖入cmd窗口即可
- 殘缺的db文件:用鼠標,直接將文件拖入cmd窗口即可
- 按下回車開始掃描,Data-Unit_MongoDB_Restore自動將找到的數據輸出到MongoDB_restor_file目錄
MongoDB數據恢復近期案例1
MongoDB數據恢復近期案例2
技術支持
溫馨提示:如重要數據丟失,建議在行動前諮詢專業工程師,以免數據遭到二次破壞。
企業級恢復支持:https://shop65444600.taobao.com