mysql怎麼經過frm和ibd文件還原數據

一、找回表結構,若是表結構沒有丟失直接到下一步mysql

a、先建立一個數據庫,這個數據庫必須是沒有表和任何操做的。linux

b、建立一個表結構,和要恢復的表名是同樣的。表裏的字段無所謂。必定要是innodb引擎的。CREATE TABLE weibo_qq0( weiboid bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;sql

c、關閉mysql, service mysqld stop;數據庫

d、用須要恢復的frm文件覆蓋剛新建的frm文件; //frm 表結構文件服務器

e、修改my.ini 裏 innodb_force_recovery=1 , 若是不成修改成 2,3,4,5,6。spa

f、 啓動mysql,service mysqld start;show create table weibo_qq0 就能li到表結構信息了。日誌

二、找回數據。記得上面把 innodb_force_recovery改掉了,須要註釋掉,否則恢復模式很差操做。 這裏有個關鍵的問題,就是innodb裏的任何數據操做都是一個日誌的記錄點。也就是若是咱們須要數據恢復,必須把以前的表的數據的日誌記錄點添加到一致。code

a、創建一個數據庫,根據上面導出的建立表的sql執行建立表。htm

b、找到記錄點。先要把當前數據庫的表空間廢棄掉,使當前ibd的數據文件和frm分離。 ALTER TABLE weibo_qq0 DISCARD TABLESPACE;get

c、把以前要恢復的 .ibd文件複製到新的表結構文件夾下。 使當前的ibd 和frm發生關係。ALTER TABLE weibo_qq0 IMPORT TABLESPACE; 結果不出意外確定會報錯。就和咱們開展數據開始說的那樣,數據記錄點不一致。咱們看看以前ibd記錄的點在什麼位置。開始執行 import tablespace,報錯 ERROR 1030 (HY000): Got error -1 from storage engine。找到mysql的錯誤日誌,InnoDB: Error: tablespace id in file ‘.testweibo_qq0.ibd’ is 112, but in the InnoDB InnoDB: data dictionary it is 1. 由於 weibo_qq0 以前的記錄點在112,當前的表只建立一次,因此記錄點是1.

d、那怎麼從1記錄到112。for ($1=1; $i<=111; $1++) {CREATE TABLE t# (id int) ENGINE=InnoDB;} 也許很奇怪,爲何是循環111,不是112。由於在a執行建立表結構的時候已經記錄增長了一次。

e、修改表結構 alter table weibo_qq0 discard tablespace;使當前的表結構和ibd脫離關係。複製.ibd到當前的目錄結構。

f、使原來數據的ibd和當前frm創建關係。 ALTER TABLE product IMPORT TABLESPACE; 這個時候沒有錯誤,說明已經創建好了。可是查詢數據仍是查不出來。

g、相比這裏你們已經知道爲何了,這個模式也不是說改了數據庫就能夠在生產環境使用。更改 innodb_force_recovery=1 , 若是不成修改成 2,3,4,5,6。直到能夠 查詢出數據爲止,而後dump出來。數據就備份出來了。

h、把全部數據導出後,在新的數據庫導入。全部數據就生成了。

擴展問題,不少時候咱們是分表表結構怎麼批量操做,提升速度呢。用循環!循環把表的空間廢棄掉。

for i in seq 0 111; do mysql -uroot -P33061 -h127.0.0.1 -Dtestdd -e 「CREATE TABLE inv_crawl_weibo_qq$i (id bigint(20) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=innodb 「; done

ALTER TABLE inv_crawl_weibo_qq0 DISCARD TABLESPACE;

從備份數據把ibd複製cp到dd數據庫下,注意複製過來的文件權限 and 用戶和組,要否則執行不會成功。

循環導入表空間。

ALTER TABLE inv_crawl_weibo_qq0 IMPORT TABLESPACE;

沒有報錯就導入成功了

【注意】若是是用的雲服務器,下載binlog 找一個非雲服務器rds數據庫,新建庫表再回複數據(覆蓋idb 重啓mysqld),再將恢復好的數據導入回雲服務器數據庫。今天嘗試了一下搞定了。不知道還有沒有更好方法,請多指正。(^-^)

摘自http://www.linuxidc.com/Linux...

相關文章
相關標籤/搜索