Mysql 通過frm ibd 恢復資料

2021-09-20 13:51:16 字數 1491 閱讀 9993

mysql儲存在磁碟中,各種天災人禍都會導致資料丟失。大公司的時候我們常常需要做好資料冷熱備,對於小公司來說要做好所有資料備份需要支出大量的成本,很多公司也是不現實的。萬一還沒有做好備份,資料被誤刪除了,或者ibdata損壞了怎麼辦呢?別擔心,只要有部分的frm、ibd存在就可以恢復部分資料。

注意:一、這個是對innodb的資料恢復。myisam不需要這麼麻煩,只要資料檔案存在直接複製過去就可以。

二、大家的mysql資料庫必須是按表存放資料的,預設不是,但是大家生產肯定是按分表設定的吧,如果不是,不好意思,這個方法不能恢復你的資料。

my.ini的設定為 innodb_file_per_table = 1。

1、找回表結構,如果表結構沒有丟失直接到下一步

a、先建立乙個資料庫,這個資料庫必須是沒有表和任何操作的。

b、建立乙個表結構,和要恢復的表名是一樣的。表裡的字段無所謂。

一定要是innodb引擎的。create table `test_table`( `jingfeng` char(20)) engine=innodb default charset=utf8;

c、關閉mysql, service mysqld stop; 

d、用需要恢復的frm檔案覆蓋剛新建的frm檔案;

e、修改my.cnf 裡 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。

f、 啟動mysql,service mysqld start;show create table test_table\g 就能看到表結構資訊了。

2、找回資料。記得上面把 innodb_force_recovery改掉了,需要注釋掉,不然恢復模式不好操作。

這裡有個關鍵的問題,就是innodb裡的任何資料操作都是乙個日誌的記錄點。

也就是如果我們需要資料恢復,必須把之前的表的資料的日誌記錄點新增到一致。

a、建立乙個資料庫,根據上面匯出的建立表的sql執行建立表。

b、找到記錄點。先要把當前資料庫的表空間廢棄掉,使當前ibd的資料檔案和frm分離。 alter table test_table discard tablespace;

c、把之前要恢復的 .ibd檔案複製到新的表結構資料夾下。 使當前的ibd 和frm發生關係。alter table test_table import tablespace;  

這個時候沒有錯誤,說明已經建立好了。如果能查到資料,到此就ok了,如果不行,請執行如下操作。

d、相比這裡大家已經知道為什麼了,這個模式也不是說改了資料庫就可以在生產環境使用。更改 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。直到可以 查詢出資料為止,然後dump出來。資料就備份出來了。

e、把所有資料匯出後,在新的資料庫匯入。所有資料就生成了。

引自:

mysql 資料恢復 通過binlog恢復資料

1 首先登入mysql 2 檢視是否開啟bin日誌 show variables like log bin 3 檢視正在被記錄的檔案 show master status 5 篩選出指定表的sql 例如表名為 address list grep address list 1sql basic.sql...

mysql通過mysql bin檔案恢復資料

mysql bin00 檔案 var lib mysql mysql bin00 是資料庫的操作日誌檔案,一定情況下可以利用操作日誌檔案來恢復資料,例如乙個表中之前插入了1條資料,之後給誤刪除了,這時可以在操作日誌檔案找到之前插入的資料,以此來恢復資料。my.cnf配置相關 1.開啟日誌儲存機制 l...

MySQL 通過 binlog 恢復資料

通過了解 binlog 日誌的相關配置,簡單掌握通過 binlog 對資料庫進行資料恢復操作 任何成熟軟體都會有一套成熟的日誌系統,當軟體出現問題時,這些日誌就是查詢問題 的寶庫。同樣,mysql 也不例外,也會有一系列日誌記錄 mysql 的執行狀態。mysql 主要有以下幾種日誌 這些日誌均需要...