您好,登錄后才能下訂單哦!
客戶設備環境為一臺操作系統為Windows Server 2008的服務器,部署MongoDB數據庫。由于業務需要,客戶在未關閉MongoDB數據庫服務的情況下,對數據庫文件進行了拷貝。將數據庫文件拷貝到其他分區后,客戶對原數據庫分區進行了格式化操作,后將數據庫文件拷回原分區,重新啟動MongoDB服務,這時,客戶發現服務無法啟動。報錯如下:
圖一:
一般來說,在服務沒有關閉的情況下,直接對MongoDB數據庫文件進行拷貝,由于服務還在運行,會導致mongod.lock文件以及WiredTiger.lock文件拷貝出現錯誤,這個時候在拷貝出的文件中刪除這兩個文件,再次啟動服務,由MongoDB自行重新生成即可。
但是通過對客戶拷貝出的文件進行現場檢測發現,客戶拷貝出的數據庫文件中,_mdb_catalog.wt文件丟失。
mdb_catalog.wt文件里存儲了MongoDB中所有集合的元數據,數據庫啟動時需要從這個文件中讀取相關的信息。由于此文件丟失,導致數據庫無法獲取數據庫中集合對應的名字,集合的創建選項,集合的索引信息等元數據,數據庫無法啟動。
首先我們嘗試從文件系統的角度對_mdb_catalog.wt文件進行恢復。
使用專業數據恢復軟件對數據庫分區進行掃描,查看掃描結果,并沒有_mdb_catalog.wt文件的信息。根據MongoDB數據庫中,數據文件的特征值,對數據庫分區進行掃描,也沒有發現_mdb_catalog.wt相關的數據區域。由此判斷,_mdb_catalog.wt文件已經被徹底覆蓋破壞,無法恢復。
此時只能從數據庫的層面想辦法提取其中的數據了。
客戶所部署的MongoDB數據庫是基于WT存儲引擎的數據庫系統,這樣的話我們就可以使用WT實用工具包提取數據庫中的數據。
首先下載WT實用工具包,然后再windows環境下編譯出可執行的wt工具。
圖二:
編譯完成后,使用wt工具,先對數據庫的集合文件中的數據進行清洗,完成后,直接讀取文件中的數據,寫入到一個dump文件中。
這個時候我們就已經把數據庫的各個集合文件中的全部可用數據提取出來了,下一步我們要做的就是還原數據庫環境。
重新創建一個MongoDB數據庫,根據我們提取出的集合文件,創建對應數量的空集合,然后使用wt工具,將提取出來的dump文件一一寫入到新創建的空集合中。這個時候就可以通過查詢集合中的數據,確認這些集合與元數據庫中集合的對應關系,修改集合名稱,重建索引信息,到這,數據恢復基本就已經完成了。
通過查詢集合中的記錄,確定記錄類型,從而確定fs.files和fs.chunks集合的位置后,修改這兩個集合名稱為xxx.files和xxx.chunks后,重建集合索引,集合恢復完成,可以正常查看其中數據:
圖三:
圖四:
協助客戶對全部集合進行索引重建之后,客戶對數據庫整體進行查詢驗證,數據無誤,此次數據恢復圓滿成功。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。