mysql由 frm和 ibd恢復資料

2021-08-28 21:43:13 字數 2775 閱讀 2972

資料小常識:

.frm存放資料庫的表結構

.ibd存放資料內容

1:建立資料庫

2:建立需要恢復的表

這樣就會在對應的資料庫下產生.frm和.ibd檔案

跳坑:建立表時候的字段和需要被恢復的表的一致

3:執行

alter table 表名字 discard tablespace;

比如:alter table user discard tablespace;

alter table `user` discard tablespace;

alter table `comment` discard tablespace;

這時候資料庫檔案下面的 user.ibd 檔案就會消失

4:將備份的ibd放到消失的user.ibd檔案下

5:修改許可權,所有者mysql,許可權660

6:執行

alter table 表名字 import tablespace;
好了,現在試一下資料可以使用了不,成功了就不需要看後面的內容了!

1.因為.frm就是表結構,所以大家會直接使用表結構

錯誤:建立的表結構和本身的.frm表結構雖然一樣(小博主驗證過),但是在使用命令是會提示表不存在

例如:

建立資料庫:直接把.rfm和.ibd檔案拷在資料庫下——————————會報錯,小博主不知道原因

本文使用:先建立和之前user表一樣的表結構。就是執行create table user .... ,執行完,資料庫目錄下就會建立user.ibd檔案(當然還有其他的)——————————————執行成功

2:不知道表結構可以使用mysqlfrm軟體將.frm的表結構匯入成表結構sql語句(有linux版和windows版)

3:匯入表資料也就是第六步的時候錯誤:

(table has row_type_compact row format, .ibd file has row_type_dynamic row format.
這裡說的是... row_type_compact ... ,... row_typr_dynamic

(這張表是mysql5.7版本,.ibd檔案是5.6版本,所以錯誤)

所以小博主選擇的是安裝mysql5.7版本

如果是:row_type_dynamic 到 row_type_compact,解決方案見下:

(這張表示mysql5.6版本,.ibd檔案是5.7版本,所以錯誤)

mysql知識點:

mysql5.7.*版本innodb_file_format引數(表示innodb檔案格式)的預設值發生了變化:

在5.7.*版本中innodb_file_format預設是antelope,而預設的行格式(row_format)是compact

在5.6.*版本中innodb_file_format預設是barracuda,而預設的行格式(row_format)是dynamic

所以需要在建立表結構時加上row_format=compact

下面是報錯資訊:

error 1808 (hy000): schema mismatch (table flags don't match, server table has 0x5 and the meta-data file has 0x1)

和error 1808 (hy000): schema mismatch (table has row_type_dynamic row format, .ibd file has row_type_compact row format.)

1、建立資料庫:直接把.rfm和.ibd檔案拷在資料庫下;(已經證明可能報錯,但是思路是如此)

2、進入資料庫:執行 alter table 表名稱 discard tablespace ; 執行完之後,資料庫目錄下的user.ibd檔案就沒了

3、把你備份的ibd放到消失的user.ibd檔案那裡。

4、給這個檔案加許可權,所有者mysql ,許可權660(你可以參考別的ibd檔案所有者和許可權設定)

5、執行 alter table 表名稱 import tablespace; 執行完,表資料就可讀了,這時候會丟失一些諸如錶行記錄數等存在系統表裡的資訊,不過那些資訊無所謂。表其實這時候已經可以正常用了。如果不放心,可以匯出sql語句或txt,再建立表匯入。

還是不行的話:

1、先建立和之前user表一樣的表結構。就是執行create table user .... ,執行完,資料庫目錄下就會建立user.ibd檔案(當然還有其他的)

2、執行 alter table `user` discard tablespace ; 執行完之後,資料庫目錄下的user.ibd檔案就沒了

3、把你備份的ibd放到消失的user.ibd檔案那裡。

4、給這個檔案加許可權,所有者mysql ,許可權660(你可以參考別的ibd檔案所有者和許可權設定)

5、執行 alter table `user` import tablespace; 執行完,表資料就可讀了,這時候會丟失一些諸如錶行記錄數等存在系統表裡的資訊,不過那些資訊無所謂。表其實這時候已經可以正常用了。如果不放心,可以匯出sql語句或txt,再建立表匯入。

end,完~

frm和 ibd恢復資料

昨日晚上開發告訴我不小心truncate兩個表的資料,要求還原。結果在阿里雲上找到了備份內容,結果是物理備份檔案.frm ibd。心中一萬個草泥馬啊。沒辦法,開始還原吧。1 檢視測試機mysql配置檔案位置 root localhost mysql which mysqld usr sbin mys...

通過frm和ibd恢復資料庫

新建空的資料庫,匯入上述表結構 刪除對應的表空間,將表對應的ibd檔案複製到資料目錄下 重新插入表空間 mysql 備份var目錄,初始化資料庫mysqld initialize insecure通過mysqlfrm可以從frm中獲取表結構 新建空的資料庫,匯入上述表結構 刪除對應的表空間,將表對應...

MySql資料庫恢復 frm 檔案

在使用虛擬伺服器時,伺服器提供商一般不會像我們使用本地資料庫一樣 使用匯入匯出 這樣的檔案字尾是 sql 大部分時候提供的是乙個資料夾,裡面包括 資料庫名資料夾,資料夾裡包括,frm,myi,myd,並且包含乙個db.opt檔案。分別介紹一下 frm 描述了表的結構 myi 表的索引 myd 儲存了...