利用frm和ibd文件恢復mysql表數(shù)據(jù)的詳細過程
問題
總是遇到mysql服務意外斷開之后導致mysql服務無法正常運行的情況,使用Navicat工具查看能夠看到里面的庫和表,但是無法獲取數(shù)據(jù)記錄,提示數(shù)據(jù)表不存在。
這里記錄一下用frm文件和ibd文件手動恢復數(shù)據(jù)表的過程。
思路
1、frm文件:
存儲數(shù)據(jù)表結(jié)構(gòu)定義的文件,每個表對應一個frm文件。
其中包含:表名、列名、主鍵、字符集等數(shù)據(jù)。
可以使用命令 SHOW CREATE TABLE table_name;或者DESCRIBE table_name;查看基于frm文件的表結(jié)構(gòu)信息。
2、ibd文件:
存儲表數(shù)據(jù)和索引的文件,每個使用InnoDB存儲引擎的表,啟用了獨立標空間時,都會有一個對應的ibd文件。
其中包含:數(shù)據(jù)行記錄、索引等數(shù)據(jù)。
3、由frm文件確認表結(jié)構(gòu),由ibd文件恢復表數(shù)據(jù)。
解決
這里以prj_idx表為例,記錄手動處理的過程。
1、確保當前 mysql 服務正常運行,新建一個數(shù)據(jù)庫
create database test;
2、創(chuàng)建 prj_idx 同名表,默認一個字段
create table `prj_idx`(`id` int);

3、替換 frm 文件
1. 斷開mysql服務
2. 使用要恢復的prj_idx.frm文件替換新創(chuàng)建的prj_idx.frm文件
3. 啟動mysql服務

4、查詢表結(jié)構(gòu)
rem 刷新數(shù)據(jù)庫表 flush tables; rem 查看表結(jié)構(gòu) show create table `prj_idx`;
這時會提示錯誤:Table ‘test.prj_idx’ doesn’t exist.

查看錯誤日志err文件,如果找不到錯誤日志位置,可以先查詢:
show variables like 'log_%';

查看錯誤日志,找到錯誤提示:
[Warning] InnoDB: table test/prj_idx contains 1 user defined columns
in InnoDB, but 16 columns in MySQL.

提示里面說明了prj_idx表中實際的字段數(shù)量。
5、刪除prj_idx表,重新創(chuàng)建正確數(shù)量的任意字段的prj_idx表
這里只需要數(shù)量正確即可
draop table if exists `prj_idx`; create table `prj_idx`(`id` int,`1` int,`2` int,`3` int,`4` int,`5` int,`6` int,`7` int,`8` int,`9` int,`10` int,`11` int,`12` int,`13` int,`14` int,`15` int);
6、重新替換frm文件,并查看表結(jié)構(gòu)
1. 斷開mysql服務 2. 使用要恢復的prj_idx.frm文件替換新創(chuàng)建的prj_idx.frm文件 3. 啟動mysql服務 4. 刷新數(shù)據(jù)表 5. 查看表結(jié)構(gòu)
flush tables; show create table `prj_idx`;
這時就能夠查看到prj_idx的表結(jié)構(gòu)了:

7、使用表空間快速遷移ibd文件
- 丟棄表空間(刪除ibd文件):
alter table prj_idx discard tablespace;
- 復制要恢復的prj_idx.ibd文件到對應的路徑下
- 導入表空間:
alter table prj_idx import tablespace;
- 確認字符集、行格式、排序順序等設置
- 再次打開prj_idx表,里面就已經(jīng)有數(shù)據(jù)了

8、myd、myi文件
- 復制到對應路徑下
- 重啟mysql服務
ok,搞定!
以上就是利用frm和ibd文件恢復mysql表數(shù)據(jù)的詳細過程的詳細內(nèi)容,更多關(guān)于frm和ibd恢復mysql表數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql 8.0.18 安裝配置方法圖文教程(linux)
這篇文章主要介紹了linux下mysql 8.0.18 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11

