MySQL數據庫扇區恢復 SQL碎片恢復 專業級恢復工具發佈

目錄

MySQL恢復的難點

本文研究範圍

MySQL InnoDB引擎存儲結構分析

MySQL數據碎片抽取代碼實現

MySQL數據碎片恢復實踐


MySQL恢復的難點

MySQL一旦出現誤刪除(drop整個庫、delete表truncate 表、清空表)、誤覆蓋(老備份恢復新數據)、勒索病毒惡意破壞等,一般用文件級恢復工具(比如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數據碎片恢復實踐

  1. 將DATAUNIT_MySQL_INNODB_PAGE_RESTORE.exe工具放在有足夠可用空間的目錄下。如果需要從某分區中搜索碎片,如D盤,則一定不能將工具放在D盤,切記!
  2. 運行DATAUNIT_MySQL_INNODB_PAGE_RESTORE.exe工具,如果提示缺少dll,請安裝vc_redist.2015x64.exe
  3. 支持以下4種數據源:
  • 裸磁盤(整個磁盤):直接輸入磁盤序號,如下圖,以管理員權限運行工具,輸入數字2,則掃描磁盤2。注意windows的磁盤從0開始編號

  • 分區:以管理員身份運行工具,輸入盤符,如D

  • 鏡像文件(裸磁盤或分區的鏡像文件,支持任意文件系統,如ext3、ext4、XFS、NTFS、VMFS5、VMFS6、vmdk、VHD文件,等等):用鼠標,直接將文件拖入cmd窗口即可
  • 殘缺的ibd文件:用鼠標,直接將文件拖入cmd窗口即可

注意本工具不支持加密的文件、加密的分區、壓縮包。

 

按下回車開始掃描,工具自動輸出搜索中找到的碎片及碎片中記錄的數量,並同步輸出到工具目錄下:

免費版會將所有數據碎片放在DATAUNIT_MySQL_INNODB_PAGE_RESTORE目錄下的sql_page.bin中,如需要進一步恢復,請將sql_page.bin壓縮打包後,發送到作者的郵箱,緊急情況可聯繫作者QQ:568229095,工作時間2小時內反饋解析。


工具下載:

MySQL_INNODB_PAGE_RESTORE下載鏈接:

https://pan.baidu.com/s/1MScdCZPMF6eXO0VVCgBDrw

提取碼: i1ag


技術支持

溫馨提示:如重要數據丟失,建議在行動前諮詢專業工程師,以免數據遭到二次破壞。

恢復支持:https://item.taobao.com/item.htm?id=577090061943

官方網站:http://www.data-unit.com/

發佈了9 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章