目錄
MySQL恢復的難點
MySQL一旦出現誤刪除(drop整個庫、delete表、truncate 表、清空表)、誤覆蓋(老備份恢復新數據)、勒索病毒惡意破壞等,如PLEASE_READ_ME_VVV病毒,一般用文件級恢復工具(比如DiskGen、UFS Explorer等)都無法恢復較大的表空間,這是因爲對大於4MB的文件,不管是在Linux內核還是Windows內核,都很容易被新的文件覆蓋。
而特別對於數據庫,因爲表空間的緩慢增長的,這列導致其數據塊在磁盤上呈離散碎片化分佈,用常規文件方案,不可能完整恢復。
本文研究範圍
MySQL常用的存儲引擎爲MyISAM和InnoDB,對應的存儲文件後綴名分別是.MYD和.IBD。MySQL5.5版本開始Innodb已經成爲Mysql的默認引擎(之前是MyISAM)。
本文主要討論在InnoDB引擎下,不依賴文件系統,直接從磁盤扇區中,抽取恢復MySQL數據行碎片的技術方案及工具實現。
MySQL InnoDB引擎存儲結構分析
表空間層級結構爲:
一個MySQL系統中,可創建多個數據庫實例,對應爲data目錄下以數據庫名命名的目錄
多個Tablespace組成一個數據庫實例
多個Segment組成一個Tablespace
多個Extent組成一個Segment
多個Page組成一個Extent
多行Row組成一個Page
一行數據的所有Field組成一行Row,
如下圖所示:
MySQL數據碎片抽取代碼實現
根據MySQL IBD文件結構,我們構建了智能分析IBD碎片頁的代碼,核心代碼如下:
打開源文件代碼:僅申請了READ權限,以確保對源文件是隻讀訪問,杜絕二次破壞!
主體功能實現類:此類實現了從源路徑中搜索所有SQL碎片,以及輸出SQL碎片到本地文件,並且最後自動將碎片文件轉化爲INSERT INTO 語句,以便可以導入到生產數據庫中:
MySQL數據碎片恢復實踐
- 將DATAUNIT_MySQL_RESTORE.exe工具放在有足夠可用空間的目錄下。如果需要從某分區中搜索碎片,如D盤,則一定不能將工具放在D盤,切記!
- 運行DATAUNIT_MySQL_RESTORE.exe工具,如果提示缺少dll,請安裝vc_redist.2015x64.exe
- 支持以下4種數據源:
-
裸磁盤(整個磁盤):直接輸入磁盤序號,如下圖,以管理員權限運行工具,輸入數字2,則掃描磁盤2。注意windows的磁盤從0開始編號
-
分區:以管理員身份運行工具,輸入盤符,如D
- 鏡像文件(裸磁盤或分區的鏡像文件,支持任意文件系統,如ext3、ext4、XFS、NTFS、VMFS5、VMFS6、vmdk、VHD文件,等等):用鼠標,直接將文件拖入cmd窗口即可
- 殘缺的ibd文件:用鼠標,直接將文件拖入cmd窗口即可
注意本工具不支持加密的文件、加密的分區、壓縮包。
按下回車開始掃描,工具自動輸出搜索中找到的碎片及碎片中記錄的數量,並同步輸出到PAGE_FILE目錄下:
免費版會將所有數據碎片保存在PAGE_FILE/page.bin,frm碎片保存在PAGE_FILE/frm.bin,以及恢復日誌保存在PAGE_FILE/search.log中,如需要進一步恢復,請將以上3個文件壓縮打包後,發送到作者的郵箱,緊急情況可聯繫作者QQ:568229095,工作時間8小時內反饋初步結論。
更新記錄:
2020-1-6:
1、支持從裸磁盤、分區、文件中搜索所有IBD page碎片
2、修復打開磁盤、分區提示被佔用的問題
3、工具運行自動創建工作目錄,ibd和日誌文件輸出到工作目錄
4、優化顯示提示信息
2020-2-28:
1、全新的日誌輸出對象
2、支持指定源文件的起止搜索範圍
3、支持跳過磁盤錯誤
4、修復磁盤大小獲取不正確的bug
5、修復邏輯卷大小獲取不正確的bug
2020-03-2 :
1、支持識別ibdata1的page
2、完善輸出日誌,搜索完成後輸出所有表的page數和record數
3、修復磁盤故障時不會返回的bug
2020-03-10:
1、修復磁盤異常時會循環讀一處位置的bug
2、支持搜索zip文件
3、支持搜索frm文件
4、默認單文件輸出
2020-03-16:
1、可單獨指定搜索zip/frm
DATAUNIT_MYSQL_RESTORE v2.3.1 ( 2020-03-19 ,by data-unit.com )
1、可指定搜索輸出的緩衝區大小,默認100MB
DATAUNIT_MYSQL_RESTORE v3.0 ( 2020-04-14 ,by data-unit.com )
1、支持共享表空間恢復
DATAUNIT_MYSQL_RESTORE_v4.0 (2020-05-26 ,by data-unit.com)
1、支持解析完整表名,並輸出到日誌文件
2、完善ibd文件頭結構FILE_HEADER
下載鏈接:
鏈接:https://pan.baidu.com/s/1BzixbsZYplC-M1eSrSw7Ag
提取碼:9ibf
技術支持
溫馨提示:如重要數據丟失,建議在行動前諮詢專業工程師,以免數據遭到二次破壞。