寶塔面板用frm和ibd文件恢復(fù)Mysql數(shù)據(jù)
寶塔面板用frm和ibd文件恢復(fù)Mysql數(shù)據(jù)寫這篇文章我是非常不情愿的,我現(xiàn)在是在寫這篇文章,但是同時我也在恢復(fù)我服務(wù)器數(shù)據(jù)庫的數(shù)據(jù),出這篇文章也是在我的意料之外,由于我正在這件事類,我就出一版這樣的mysql.frm.ibd文件數(shù)據(jù)恢復(fù)教程,希望這次教程可以幫助到更多需要恢復(fù)
寶塔面板用frm和ibd文件恢復(fù)Mysql數(shù)據(jù)寫這篇文章我是非常不情愿的,我現(xiàn)在是在寫這篇文章,但是同時我也在恢復(fù)我服務(wù)器數(shù)據(jù)庫的數(shù)據(jù),出這篇文章也是在我的意料之外,由于我正在這件事類,我就出一版這樣的mysql.frm.ibd文件數(shù)據(jù)恢復(fù)教程,希望這次教程可以幫助到更多需要恢復(fù)
寫這篇文章我是非常不情愿的,我現(xiàn)在是在寫這篇文章,但是同時我也在恢復(fù)我服務(wù)器數(shù)據(jù)庫的數(shù)據(jù),出這篇文章也是在我的意料之外,由于我正在這件事類,我就出一版這樣的mysql.frm.ibd文件數(shù)據(jù)恢復(fù)教程,希望這次教程可以幫助到更多需要恢復(fù)的人,我現(xiàn)在是情緒暴漲
我先說一下我的服務(wù)器崩潰經(jīng)過,wordpress博客網(wǎng)站,寶塔輸入了rm指令導(dǎo)致全服務(wù)器文件被刪完,因?yàn)槲沂前⒗镌频姆?wù)器,所以我可以去找那邊的工程師來達(dá)到緊急修復(fù)(這里也建議在商業(yè)化云服務(wù)那里購買主機(jī)的人一旦出現(xiàn)問題就找服務(wù)商工程師),他們解決的很快,原本我以為服務(wù)器文件都刪除了的,一切都不剩,但是經(jīng)過了和工程師共同的努力,那邊提供了我一個暫時盤,用于存儲丟失的數(shù)據(jù),最后就是我的所有數(shù)據(jù)都找回來了,但是,wordpress的數(shù)據(jù)庫文件如果不備份的話,那你直面的就不是sql文件,而是.frm與.ibd文件,
如果你不懂?dāng)?shù)據(jù)表創(chuàng)建的話,那你先看文章,如果看不懂或者一懂半懂就請自己去學(xué)習(xí)數(shù)據(jù)庫的相關(guān)知識!
這里順便介紹一下.frm文件與.ibd文件與.ibdata文件
.frm:與表相關(guān)的元數(shù)據(jù)信息都存放在.frm文件中,主要是表結(jié)構(gòu)的定義信息,不論什么存儲引擎,每一個表都會有一個以表名命名的.frm文件。
.ibd和.ibdata:兩者都是專屬于InnoDB存儲引擎的數(shù)據(jù)庫文件。
當(dāng)采用共享表空間時所有InnoDB表的數(shù)據(jù)均存放在.ibdata中,所以當(dāng)表越來越多時,這個文件會變得很大;
相對應(yīng)的.ibd就是采用獨(dú)享表空間時InnoDB表的數(shù)據(jù)文件。
修改為獨(dú)享表空間的方法是在my.ini配置文件中添加/修改此條:
Innodb_file_per_table=1
mysql存儲的所有數(shù)據(jù)文件都在data,而我們只有.frm與.ibd
這些在數(shù)據(jù)庫里面可以看見,但是打不開,打開直接報錯,
那么廢話不多說了,我們直接開始教程!
Mysql 5.6或者5.7,我這里用的是5.7,因?yàn)楣P者專業(yè)是移動應(yīng)用開發(fā),所以學(xué)點(diǎn)Mysql不過分吧
我這邊用的是自己電腦windows下 做的 因?yàn)樗僮骺隙ㄒ确?wù)器方便 當(dāng)恢復(fù)回來后在導(dǎo)回服務(wù)器
我們先創(chuàng)建數(shù)據(jù)庫建議數(shù)據(jù)庫名跟生前的數(shù)據(jù)庫名是一樣的,比如我的小林博客生前數(shù)據(jù)庫名為pzo.cc,那莫這個時候新建也是pzo.cc
1.先隨意創(chuàng)建一張同名表
輸入指令:
CREATETABLE wp_commentmeta(comment_IDbigint)ENGINE=InnoDB;
2.關(guān)閉mysql服務(wù)
net stop mysql
或者點(diǎn)擊計(jì)算機(jī)--管理--服務(wù)--找到Mysql
然后關(guān)閉
3 復(fù)制備份的.frm覆蓋新建的表.frm
4 開啟mysql服務(wù)
net start mysql
5.在mysql安裝目錄data文件夾下用文本編輯器打開.err文件
找到錯誤日志
然后刪除當(dāng)前表
新建4個字段的同名表,這里建議大家用可視設(shè)計(jì)mysql的軟件來設(shè)置,比如Navicat,這樣的話就可以更方便,不會因?yàn)橛弥噶顒?chuàng)建數(shù)據(jù)表而出錯
CREATE TABLEwp_commentmeta( `meta_id` bigint(20) NOT NULL , `comment_id` bigint(20) NOT NULL , `meta_key` varchar(255) NULL, `meta_value` longtext NULL, ) ENGINE=InnoDB;
新建擁有4個字段的表
最主要的是這種樣式要跟生前一樣`meta_id` bigint,里面的長度小數(shù)點(diǎn)主鍵外鍵都可以不管
然后再關(guān)閉mysql服務(wù)
net stop mysql
然后再復(fù)制備份的.frm覆蓋新建的表.frm
修改配置文件my.ini在[mysqld]下添加/修改innodb_force_recovery=6,一般這一段是沒有的,所以你用搜索功能搜索[mysqld],然后在下面添加innodb_force_recovery=6
啟動mysql服務(wù),查看表結(jié)構(gòu),這個時候你可以看見表結(jié)構(gòu)已經(jīng)恢復(fù)
mysql> desc wp_commentmeta;
導(dǎo)出表結(jié)構(gòu)cmd
mysqldump -uroot -proot data_rec weibo_twets > e:tweets.sql
>后面是保存路徑和保存名稱以及后綴
在.sql文件中找到建表語句。
/*/或者也可以用數(shù)據(jù)庫管理軟件如navicat中找到這張表,在數(shù)據(jù)表右鍵對象信息中復(fù)制下DDL選項(xiàng)卡里的內(nèi)容。
停止mysql服務(wù),然后刪除這張表,用獲得的建表語句(/*/)新建這張數(shù)據(jù)表,也就是你剛剛復(fù)制的建表語句,加上ROW_FORMAT=COMPACT;將表結(jié)構(gòu)改為靜態(tài)表;
比如我復(fù)制的建表語句是
CREATE TABLE `wp_commentmeta` ( `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL, `meta_value` longtext COLLATE utf8mb4_unicode_520_ci, PRIMARY KEY (`meta_id`), KEY `comment_id` (`comment_id`), KEY `meta_key` (`meta_key`(191)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
那么添加ROW_FORMAT=COMPACT;后是這樣的:
CREATE TABLE `wp_commentmeta` ( `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0', `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL, `meta_value` longtext COLLATE utf8mb4_unicode_520_ci, PRIMARY KEY (`meta_id`), KEY `comment_id` (`comment_id`), KEY `meta_key` (`meta_key`(191)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci ROW_FORMAT=COMPACT;
然后在mysql使用命令提示符走這段建表語句就行了
注:一定要要有ROW_FORMAT=COMPACT;不然后面添加了.ibd文件依然打不開
好,我們有了表結(jié)構(gòu)后,我們現(xiàn)在需要恢復(fù)表數(shù)據(jù)
分離表空間
使當(dāng)前.ibd的數(shù)據(jù)文件和.frm分離。
ALTER TABLE wp_commentmeta DISCARD TABLESPACE;
然后復(fù)制備份的.ibd文件覆蓋新的表數(shù)據(jù)
重啟mysql
導(dǎo)入這個表空間
ALTER TABLE wp_commentmeta IMPORT TABLESPACE;
然后這里數(shù)據(jù)就恢復(fù)了!
注:本次教程是本地恢復(fù),并不是線上恢復(fù),線上恢復(fù)是一樣的道理,也是一樣的指令,可以試試
版權(quán)所有:深圳市網(wǎng)商在線科技有限公司