【服務(wù)器數(shù)據(jù)恢復(fù)】同友存儲(chǔ)mysql數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

服務(wù)器數(shù)據(jù)恢復(fù)環(huán)境:
同友存儲(chǔ),底層由數(shù)塊物理硬盤組建的raid5磁盤陣列,存儲(chǔ)池劃分若干lun,每個(gè)lun下有數(shù)臺(tái)虛擬機(jī)。
服務(wù)器故障:
未知原因?qū)е麓鎯?chǔ)崩潰,無(wú)法啟動(dòng),虛擬機(jī)全部丟失,其中一個(gè)lun中的3臺(tái)虛擬機(jī)數(shù)據(jù)尤為重要,需要恢復(fù)其中的數(shù)據(jù)。
服務(wù)器數(shù)據(jù)恢復(fù)過(guò)程:
1、將故障存儲(chǔ)中的所有磁盤以只讀方式進(jìn)行全盤鏡像備份,后續(xù)的數(shù)據(jù)分析和數(shù)據(jù)恢復(fù)操作都基于鏡像文件進(jìn)行,避免對(duì)原始數(shù)據(jù)造成二次破壞。
2、基于鏡像文件分析raid5陣列,發(fā)現(xiàn)故障存儲(chǔ)中的raid5陣列缺失2塊磁盤,熱備盤已經(jīng)啟用。通過(guò)實(shí)際情況可以推斷故障發(fā)生的大致過(guò)程:第一塊硬盤掉線后raid5啟動(dòng)熱備盤替換。第二塊硬盤掉線后raid5降級(jí),第三塊硬盤掉線導(dǎo)致raid5陣列崩潰。這種情況下一般是無(wú)法通過(guò)校驗(yàn)直接獲取到缺失盤的數(shù)據(jù),只能使用磁盤同等大小的全0的空鏡像進(jìn)行raid重組(依賴空鏡像組建的raid的文件系統(tǒng)結(jié)構(gòu)會(huì)嚴(yán)重?fù)p壞,相當(dāng)于每個(gè)條帶都缺失兩個(gè)塊的數(shù)據(jù),所以除特殊情況外不建議如此操作)。
重建raid:

3、通過(guò)重組出來(lái)的raid5陣列提取LUN。通過(guò)對(duì)存儲(chǔ)結(jié)構(gòu)的進(jìn)一步分析獲取到存儲(chǔ)劃分的MAP塊,對(duì)各個(gè)LUN的數(shù)據(jù)塊指針進(jìn)行解析并由北亞企安數(shù)據(jù)恢復(fù)工程師編寫程序提取LUN碎片。碎片提取完成后進(jìn)行碎片拼接,組成完整的LUN。
提取LUN:

4、導(dǎo)出LUN內(nèi)所有虛擬機(jī)并嘗試啟動(dòng),結(jié)果由于操作系統(tǒng)被破壞,虛擬機(jī)無(wú)法啟動(dòng)。
5、提取虛擬機(jī)內(nèi)的文件,但虛擬機(jī)內(nèi)的文件多數(shù)損壞嚴(yán)重,只有少數(shù)文件可用,只能通過(guò)其他方案進(jìn)行恢復(fù)。
6、本次需要進(jìn)行數(shù)據(jù)恢復(fù)的虛擬機(jī)內(nèi)有mysql數(shù)據(jù)庫(kù),可以根據(jù)mysql數(shù)據(jù)庫(kù)底層存儲(chǔ)的特殊性掃描數(shù)據(jù)頁(yè)并提取數(shù)據(jù)。
數(shù)據(jù)恢復(fù)過(guò)程截圖:

7、根據(jù)mysql數(shù)據(jù)頁(yè)特征掃描數(shù)據(jù)頁(yè)并導(dǎo)出數(shù)據(jù)(僅適用于innodb引擎數(shù)據(jù)庫(kù),myisam引擎數(shù)據(jù)庫(kù)沒(méi)有“數(shù)據(jù)頁(yè)”概念),分析系統(tǒng)表獲取各用戶表信息,根據(jù)各個(gè)表的id分割數(shù)據(jù)頁(yè)。
8、因?yàn)樵摂?shù)據(jù)庫(kù)的表結(jié)構(gòu)變更過(guò)多次,存儲(chǔ)故障導(dǎo)致系統(tǒng)表的部分?jǐn)?shù)據(jù)丟失,所以記錄提取過(guò)程非常痛苦(這里不贅述)。
獲取最早版本數(shù)據(jù)庫(kù)各個(gè)表的表結(jié)構(gòu)。由于合并快照前的父盤因?yàn)閷懭胼^早,使用第一塊掉線盤進(jìn)行校驗(yàn)獲取到完整數(shù)據(jù),然后提取出其中數(shù)據(jù)庫(kù)各個(gè)表的表結(jié)構(gòu)。用戶方提供了最新版本數(shù)據(jù)庫(kù)的建表腳本。
分別使用兩組不同表結(jié)構(gòu)提取數(shù)據(jù)記錄并導(dǎo)入到搭建好的環(huán)境中的mysql數(shù)據(jù)庫(kù)內(nèi),剔除各個(gè)表中因?yàn)楸斫Y(jié)構(gòu)變更所導(dǎo)致的亂碼數(shù)據(jù),最后將兩組數(shù)據(jù)分別導(dǎo)出為.sql文件。
數(shù)據(jù)驗(yàn)證:
兩個(gè)版本的數(shù)據(jù)庫(kù)表結(jié)構(gòu)不同,先聯(lián)系用戶方工程師進(jìn)行調(diào)試,調(diào)試完成后導(dǎo)入平臺(tái)進(jìn)行測(cè)試,平臺(tái)測(cè)試成功,本次數(shù)據(jù)恢復(fù)工作完成。