MySQL 通過.frm文件和.ibd文件實現InnoDB引擎的數據恢復


起因是這樣的,公司的領導表示說服務器崩了,修理好之后,只剩下數據庫目錄下的物理文件(即.frm文件與.ibd文件)。然后,整了一份壓縮包給我,叫我瞅一下能不能把數據恢復出來。我當場愣了一下,這都啥文件啊,以前天天整開發,也沒見到這種玩意啊。雖然對這文件不是很熟悉,但是領導交給我了,我也不能推脫,好歹要努力一下看看。

 

環境准備:

1.本文使用的是Windows 筆記本*1 ( 系統可以是Windows、也可以是CentOS、Debian等等MySQL Utilities能兼容的都行)

2.MySQL 5.7+

 

一、什么是.frm文件

那么首先我要做的事情就是這.frm結尾的文件到底是什么東西?

我通過百度找到了MySQL官網,我點進去一看,第一段就是下面這句話。憑借着我不怎么樣的英文,往下看了三行,發現了標紅框的兩句話。

得到的結論就是:

1..frm文件描述了表的格式,也就是說里面能獲取到表的定義

2..frm文件與表格的名字相同

 

二、什么是.ibd文件

經過上面的猜測,很容易就可以聯想到表結構都有了,那么這個.ibd文件可能就是存放數據、索引信息之類的了。

經過一番的百度,查閱到以下資料:

.ibd文件是使用InnoDB引擎的表產生的索引和數據文件。

(如果引擎使用的是MyISAM的話,會產生索引和數據分開存放的兩個文件,.MYI(索引文件)和.MYD(數據文件))

 

 

 

 

 

三、獲取frm文件的表結構信息

接下來,知道了有這么些文件,那么怎么把數據讀取出來呢?

MySQL 提供了一款支持多個平台的工具軟件,叫做MySQL Utilities。

 

 

 這個工具包括克隆、復制、比較、差異、導出、導入、解析frm文件等功能。同時,這款軟件支持多種系統使用,使用方法都是一致的。

(附下載地址:http://dev.mysql.com/downloads/utilities/)

通過命令:

 mysqlfrm [.frm文件地址] --diagnostic

就可以查看frm文件包含的完整表結構了。

 

 

 

於是我手寫了一個批處理腳本,把frm文件的表格結構都讀取出來放在一個文本文件里,這樣就獲取到了所有的表結構。

CHCP 65001>nul
@echo off
for %%i in ([frm文件所在目錄]\*.frm) do (
  mysqlfrm %%i --diagnostic >> test.txt
)
pause

接着就是創建對應的數據庫,把表結構的語句輸入,執行一下SQL就可以了。

 

四、表結構有了,就可以開始恢復.ibd數據了

先把數據庫里自帶的數據文件脫離(脫離之后,表對應的.ibd文件會被刪除)。

alter table aaa discard tablespace; 

然后把原先的.ibd文件復制到數據庫存放的數據目錄。

不知道在哪的同學,可以執行以下語句查看數據目錄位置:

 

這個目錄里面是按照數據庫分目錄的:

 

 

 

找到我們自己的數據庫,把.ibd文件復制進去。

到了這一步,就可以准備關聯數據了。

執行以下命令關聯數據

alter table aaa import tablespace; 

 

 

五、成功之后,就可以驗證數據了。

 

 

 

在上述的過程中,我是批量操作的。

1.批量獲取表結構

2.批量創建表

3.批量脫離表數據。

4.批量管理表數據。

最后,成功恢復數據。

 

感謝收看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM