標籤:一個資料庫 關係 記錄 磁碟 top ble pac 檔案複製 大量
mysql儲存在磁碟中,各種天災人禍都會導致資料丟失。大公司的時候我們常常需要做好資料冷熱備,對於小公司來說要做好所有資料備份需要支出大量的成本,很多公司也是不現實的。萬一還沒有做好備份,資料被誤刪除了,或者ibdata損壞了怎麼辦呢?別擔心,只要有部分的frm、ibd存在就可以恢複部分資料。
注意:
一、這個是對innodb的資料恢複。myisam不需要這麼麻煩,只要資料檔案存在直接複製過去就可以。
二、大家的mysql資料庫必須是按表存放資料的,預設不是,但是大家生產肯定是按分表設定的吧,如果不是,不好意思,這個方法不能恢複你的資料。
my.ini的設定為 innodb_file_per_table = 1。
1、找回表結構,如果表結構沒有丟失直接到下一步
a、先建立一個資料庫,這個資料庫必須是沒有表和任何操作的。
b、建立一個表結構,和要恢複的表名是一樣的。表裡的欄位無所謂。
一定要是innodb引擎的。CREATE TABLE `ax_table`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
c、關閉mysql, service mysqld stop;
d、用需要恢複的frm檔案覆蓋剛建立的frm檔案;
e、修改my.ini 裡 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。
f、 啟動mysql,service mysqld start;show create table ax_table 就能看到表結構資訊了。
2、找回資料。記得上面把 innodb_force_recovery改掉了,需要注釋掉,不然復原模式不好操作。
這裡有個關鍵的問題,就是innodb裡的任何資料操作都是一個日誌的記錄點。
也就是如果我們需要資料恢複,必須把之前的表的資料的日誌記錄點添加到一致。
a、建立一個資料庫,根據上面匯出的建立表的sql執行建立表。
b、找到記錄點。先要把當前資料庫的資料表空間廢棄掉,使當前ibd的資料檔案和frm分離。 ALTER TABLE ax_table DISCARD TABLESPACE;
c、把之前要恢複的 .ibd檔案複製到新的表結構檔案夾下。 使當前的ibd 和frm發生關係。ALTER TABLE ax_table IMPORT TABLESPACE;
這個時候沒有錯誤,說明已經建立好了。如果能查到資料,到此就OK了,如果不行,請執行如下操作。
d、相比這裡大家已經知道為什麼了,這個模式也不是說改了資料庫就可以在生產環境使用。更改 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。直到可以 查詢出資料為止,然後dump出來。資料就備份出來了。
e、把所有資料匯出後,在新的資料庫匯入。所有資料就產生了。
Mysql 通過frm&ibd 恢複資料