服務(wù)器數(shù)據(jù)恢復(fù)環(huán)境:
一臺(tái)Windows Server操作系統(tǒng)服務(wù)器,服務(wù)器上部署MongoDB數(shù)據(jù)庫。
MongoDB數(shù)據(jù)庫故障&檢測:
工作人員在未關(guān)閉MongoDB數(shù)據(jù)庫服務(wù)的情況下,將數(shù)據(jù)庫文件拷貝到其他分區(qū)??截愅瓿珊髮⒃璏ongoDB數(shù)據(jù)庫所在分區(qū)進(jìn)行了格式化操作,然后將數(shù)據(jù)庫文件拷回原分區(qū),重新啟動(dòng)MongoDB服務(wù),服務(wù)無法啟動(dòng)。報(bào)錯(cuò)如下:
北亞企安數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)恢復(fù)
Tips:在MongoDB服務(wù)沒有關(guān)閉的情況下,直接拷貝MongoDB數(shù)據(jù)庫文件會(huì)導(dǎo)致mongod.lock文件以及WiredTiger.lock文件拷貝出錯(cuò)。這種情況下只要在拷貝出的文件中刪除這兩個(gè)文件,重新啟動(dòng)MongoDB服務(wù)后MongoDB會(huì)自動(dòng)重新生成這2個(gè)文件。
對(duì)工作人員拷貝出的文件進(jìn)行檢測后發(fā)現(xiàn),拷貝出的數(shù)據(jù)庫文件中沒有發(fā)現(xiàn)_mdb_catalog.wt文件。
Tips:_mdb_catalog.wt文件里存儲(chǔ)了MongoDB數(shù)據(jù)庫中所有集合的元數(shù)據(jù),MongoDB數(shù)據(jù)庫啟動(dòng)時(shí)需要從_mdb_catalog.wt文件中讀取相關(guān)信息。_mdb_catalog.wt文件丟失會(huì)導(dǎo)致MongoDB數(shù)據(jù)庫無法獲取數(shù)據(jù)庫中集合對(duì)應(yīng)的名字、集合的創(chuàng)建選項(xiàng)、集合的索引信息等元數(shù)據(jù),MongoDB數(shù)據(jù)庫無法啟動(dòng)。
MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:
1、將服務(wù)器中所有磁盤編號(hào)后取出,初步檢測后沒有發(fā)現(xiàn)明顯的硬件故障,都可以正常讀取。以只讀方式將所有磁盤進(jìn)行扇區(qū)級(jí)全盤鏡像,鏡像完成后將所有詞磁盤按照編號(hào)還原到原服務(wù)器中,后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢復(fù)操作都基于鏡像文件進(jìn)行,避免對(duì)原磁盤數(shù)據(jù)造成二次破壞。
2、嘗試從文件系統(tǒng)層面恢復(fù)_mdb_catalog.wt文件。掃描數(shù)據(jù)庫分區(qū)并沒有發(fā)現(xiàn)_mdb_catalog.wt文件相關(guān)信息。根據(jù)MongoDB數(shù)據(jù)庫中數(shù)據(jù)文件的特征值掃描MongoDB數(shù)據(jù)庫所在分區(qū),也沒有發(fā)現(xiàn)和_mdb_catalog.wt相關(guān)的數(shù)據(jù)區(qū)域。這種情況下可以判斷_mdb_catalog.wt文件已經(jīng)被徹底破壞,無法恢復(fù)。
3、嘗試從數(shù)據(jù)庫層面恢復(fù)數(shù)據(jù)。
本案例中部署的MongoDB數(shù)據(jù)庫是基于WT存儲(chǔ)引擎的數(shù)據(jù)庫系統(tǒng),可以使用WT實(shí)用工具包提取數(shù)據(jù)庫中的數(shù)據(jù)。
a、下載WT實(shí)用工具包,在windows環(huán)境下編譯出可執(zhí)行的wt工具。
北亞企安數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)恢復(fù)
b、使用編譯出來的wt工具清洗MongoDB數(shù)據(jù)庫的集合文件中的數(shù)據(jù)。清洗完成后,讀取文件中的數(shù)據(jù)并寫入到一個(gè)dump文件中。
c、將MongoDB數(shù)據(jù)庫的各個(gè)集合文件中的全部可用數(shù)據(jù)提取出來。
d、重新創(chuàng)建一個(gè)MongoDB數(shù)據(jù)庫,根據(jù)提取出的集合文件創(chuàng)建對(duì)應(yīng)數(shù)量的空集合。使用wt工具將提取出來的dump文件一一寫入到新創(chuàng)建的空集合中。
e、通過查詢集合中的數(shù)據(jù),確認(rèn)這些集合與元數(shù)據(jù)庫中集合的對(duì)應(yīng)關(guān)系。修改集合名稱,重建索引信息。
通過查詢集合中的記錄,確定記錄類型,從而確定fs.files和fs.chunks集合的位置。修改這兩個(gè)集合名稱為xxx.files和xxx.chunks后,重建集合索引,集合恢復(fù)完成,可以正常查看其中數(shù)據(jù):
北亞企安數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)恢復(fù)
北亞企安數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)恢復(fù)
MongoDB數(shù)據(jù)庫數(shù)據(jù)驗(yàn)證:
將全部集合進(jìn)行索引重建后,由用戶方對(duì)MongoDB數(shù)據(jù)庫進(jìn)行查詢驗(yàn)證,經(jīng)過驗(yàn)證用戶方確認(rèn)數(shù)據(jù)無誤,認(rèn)可數(shù)據(jù)恢復(fù)結(jié)果。本次數(shù)據(jù)恢復(fù)工作完成。
審核編輯 黃宇
-
數(shù)據(jù)恢復(fù)
+關(guān)注
關(guān)注
10文章
645瀏覽量
18073 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3907瀏覽量
65937 -
mongodb
+關(guān)注
關(guān)注
0文章
24瀏覽量
453
發(fā)布評(píng)論請先 登錄
oracle數(shù)據(jù)恢復(fù)—oracle數(shù)據(jù)庫誤執(zhí)行錯(cuò)誤truncate命令如何恢復(fù)數(shù)據(jù)?

分布式存儲(chǔ)數(shù)據(jù)恢復(fù)—虛擬機(jī)上hbase和hive數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫文件拷貝后服務(wù)無法啟動(dòng)的數(shù)據(jù)恢復(fù)

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Windows無法啟動(dòng)MongoDB服務(wù)的數(shù)據(jù)恢復(fù)案例

虛擬化數(shù)據(jù)恢復(fù)—誤還原快照的數(shù)據(jù)恢復(fù)案例
SqlServer數(shù)據(jù)恢復(fù)—SqlServer數(shù)據(jù)庫數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MYSQL數(shù)據(jù)庫ibdata1文件損壞的數(shù)據(jù)恢復(fù)案例
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—通過拼接數(shù)據(jù)庫碎片恢復(fù)SQLserver數(shù)據(jù)庫

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Oracle ASM實(shí)例無法掛載的數(shù)據(jù)恢復(fù)案例

oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫打開報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例

Oracle數(shù)據(jù)恢復(fù)—異常斷電后Oracle數(shù)據(jù)庫啟庫報(bào)錯(cuò)的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫文件system01.dbf損壞的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯(cuò)誤的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SqlServer數(shù)據(jù)庫底層File Record被截?cái)酁?的數(shù)據(jù)恢復(fù)案例

評(píng)論