MySQL數據庫恢復-勒索病毒 PLEASE_READ_ME_VVV、delete、drop,沒有binlog 數據庫恢復工具 持續更新2020.5.27

目錄

MySQL恢復的難點

本文研究範圍

MySQL InnoDB引擎存儲結構分析

MySQL數據碎片抽取代碼實現

MySQL數據碎片恢復實踐


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數據碎片恢復實踐

  1. 將DATAUNIT_MySQL_RESTORE.exe工具放在有足夠可用空間的目錄下。如果需要從某分區中搜索碎片,如D盤,則一定不能將工具放在D盤,切記!
  2. 運行DATAUNIT_MySQL_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窗口即可

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

 

按下回車開始掃描,工具自動輸出搜索中找到的碎片及碎片中記錄的數量,並同步輸出到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


技術支持

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章