MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)環(huán)境:
一臺(tái)Windows Server操作系統(tǒng)虛擬機(jī)上部署MongoDB數(shù)據(jù)庫。
MongoDB數(shù)據(jù)庫故障:
管理員在未關(guān)閉MongoDB服務(wù)的情況下拷貝數(shù)據(jù)庫文件。將MongoDB數(shù)據(jù)庫文件拷貝到其他分區(qū)后,對(duì)MongoDB數(shù)據(jù)庫所在原分區(qū)進(jìn)行了格式化操作。格式化完成后將數(shù)據(jù)庫文件拷回原分區(qū),并重新啟動(dòng)MongoDB服務(wù)。發(fā)現(xiàn)服務(wù)無法啟動(dòng)并報(bào)錯(cuò)。
北亞企安數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
MongoDB數(shù)據(jù)庫故障檢測(cè):
在MongoDB數(shù)據(jù)庫服務(wù)沒有關(guān)閉的情況下拷貝MongoDB數(shù)據(jù)庫文件,通常會(huì)導(dǎo)致mongod.lock文件以及WiredTiger.lock文件拷貝出錯(cuò)。如果從拷貝出的文件中刪除掉這兩個(gè)文件后再次啟動(dòng)服務(wù),MongoDB數(shù)據(jù)庫會(huì)自行重新生成這2個(gè)文件。
北亞企安數(shù)據(jù)恢復(fù)工程師對(duì)拷貝出的文件進(jìn)行檢測(cè),發(fā)現(xiàn)_mdb_catalog.wt文件丟失。
_mdb_catalog.wt文件存放MongoDB中所有集合的元數(shù)據(jù)。數(shù)據(jù)庫啟動(dòng)時(shí)需要從這個(gè)文件中讀取相關(guān)的信息。此文件丟失會(huì)導(dǎo)致數(shù)據(jù)庫無法獲取數(shù)據(jù)庫中集合對(duì)應(yīng)的WT table名字、集合的創(chuàng)建選項(xiàng)、集合的索引信息等元
數(shù)據(jù),導(dǎo)致數(shù)據(jù)庫無法啟動(dòng)。
MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)過程:
1、嘗試從文件系統(tǒng)層面恢復(fù)_mdb_catalog.wt文件。
掃描數(shù)據(jù)庫所在分區(qū)并沒有_mdb_catalog.wt文件的信息。根據(jù)MongoDB數(shù)據(jù)庫中數(shù)據(jù)文件的特征值再次掃描數(shù)據(jù)庫分區(qū),也沒有發(fā)現(xiàn)_mdb_catalog.wt相關(guān)的數(shù)據(jù)區(qū)域。基本上可以判斷,_mdb_catalog.wt文件已經(jīng)被徹底破壞,無法恢復(fù)。
2、嘗試從數(shù)據(jù)庫層面恢復(fù)數(shù)據(jù)。
本案例中的MongoDB數(shù)據(jù)庫基于WiredTiger存儲(chǔ)引擎,可以使用WiredTiger實(shí)用工具包提取數(shù)據(jù)庫中的數(shù)據(jù)。
a、下載WiredTiger實(shí)用工具包,在windows環(huán)境下編譯出可執(zhí)行的wt工具。
北亞企安數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
b、使用編譯完成的wt工具,清洗回寫MongoDB數(shù)據(jù)庫的集合文件中的數(shù)據(jù)。
c、完成數(shù)據(jù)清洗后讀取文件中的數(shù)據(jù),并寫入到一個(gè).dump文件中。通過這種方式將數(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)系。修改集合名稱,重建索引信息。
由于該MongoDB數(shù)據(jù)庫中存在Gridfs存儲(chǔ)的大字段(文件)集合,所以可以通過查詢集合中的記錄確定記錄類型,從而確定fs.files和fs.chunks集合的位置。修改這兩個(gè)集合名稱為xxx.files和xxx.chunks后,重建集合索引。Gridfs集合恢復(fù)完成后就可以正常查看其中數(shù)據(jù)。
北亞企安數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
北亞企安數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫數(shù)據(jù)恢復(fù)
3、協(xié)助用戶方對(duì)全部集合進(jìn)行索引重建之后,由用戶方對(duì)數(shù)據(jù)庫進(jìn)行查詢驗(yàn)證,經(jīng)過驗(yàn)證確認(rèn)數(shù)據(jù)無誤。本次數(shù)據(jù)恢復(fù)工作完成。
審核編輯 黃宇
-
數(shù)據(jù)恢復(fù)
+關(guān)注
關(guān)注
10文章
649瀏覽量
18141 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3926瀏覽量
66186 -
mongodb
+關(guān)注
關(guān)注
0文章
24瀏覽量
468
發(fā)布評(píng)論請(qǐng)先 登錄
數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—MongoDB數(shù)據(jù)庫文件丟失的數(shù)據(jù)恢復(fù)案例

數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

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ù)—Windows無法啟動(dòng)MongoDB服務(wù)的數(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ù)案例
Sybase數(shù)據(jù)恢復(fù)—Sybase數(shù)據(jù)庫無法啟動(dòng)怎么恢復(fù)數(shù)據(jù)?

數(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)論