mysql怎么通过frm和ibd文件还原数据
1、找回表結構,如果表結構沒有丟失直接到下一步
a、先創建一個數據庫,這個數據庫必須是沒有表和任何操作的。
b、創建一個表結構,和要恢復的表名是一樣的。表里的字段無所謂。一定要是innodb引擎的。CREATE TABLE weibo_qq0( weiboid bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
c、關閉mysql, service mysqld stop;
d、用需要恢復的frm文件覆蓋剛新建的frm文件; //frm 表結構文件
e、修改my.ini 里 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。
f、 啟動mysql,service mysqld start;show create table weibo_qq0 就能li到表結構信息了。
2、找回數據。記得上面把 innodb_force_recovery改掉了,需要注釋掉,不然恢復模式不好操作。 這里有個關鍵的問題,就是innodb里的任何數據操作都是一個日志的記錄點。也就是如果我們需要數據恢復,必須把之前的表的數據的日志記錄點添加到一致。
a、建立一個數據庫,根據上面導出的創建表的sql執行創建表。
b、找到記錄點。先要把當前數據庫的表空間廢棄掉,使當前ibd的數據文件和frm分離。 ALTER TABLE weibo_qq0 DISCARD TABLESPACE;
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...
總結
以上是生活随笔為你收集整理的mysql怎么通过frm和ibd文件还原数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2 表单验证
- 下一篇: K NEAREST NEIGHBOR 算