2019-07-08MySQL僅從.frm和.ibd文件恢復(fù)數(shù)據(jù)

前言

MySQL的數(shù)據(jù)庫其相關(guān)文件都會存放在安裝目錄下data文件夾下的同命文件夾中额获,不同的存儲引擎創(chuàng)建的表其文件也不一樣,下面來認(rèn)識下這些數(shù)據(jù)庫文件晶衷。

db.opt

用來記錄該庫的默認(rèn)字符集編碼和字符集排序規(guī)則用的蓝纲。也就是說如果你創(chuàng)建數(shù)據(jù)庫指定默認(rèn)字符集和排序規(guī)則,那么后續(xù)創(chuàng)建的表如果沒有指定字符集和排序規(guī)則晌纫,那么該新建的表將采用db.opt文件中指定的屬性税迷。

.frm

與表相關(guān)的元數(shù)據(jù)信息都存放在.frm文件中,主要是表結(jié)構(gòu)的定義信息,不論什么存儲引擎,每一個表都會有一個以表名命名的.frm文件。

.MYD和.MYI

.MYD:MY Data锹漱,是MyISAM存儲引擎專用的用于存放MyISAM表的數(shù)據(jù)箭养;

.MYI:MY Index,也是專屬于MyISAM存儲引擎的主要存放MyISAM表的索引相關(guān)信息哥牍。

.ibd和.ibdata

兩者都是專屬于InnoDB存儲引擎的數(shù)據(jù)庫文件毕泌。

當(dāng)采用共享表空間時所有InnoDB表的數(shù)據(jù)均存放在.ibdata中喝检,所以當(dāng)表越來越多時,這個文件會變得很大撼泛;

相對應(yīng)的.ibd就是采用獨享表空間時InnoDB表的數(shù)據(jù)文件蛇耀。

修改為獨享表空間的方法是在my.ini配置文件中添加/修改此條:

Innodb_file_per_table=1

注意:筆者所用的MySQL-5.7是默認(rèn)獨享表空間的,不用特意在配置文件中添加坎弯。

當(dāng)然,就算開啟了獨享表空間译暂,.ibdata文件也會越來越大抠忘,因為這個文件里還存儲了:

? ? 變更緩沖區(qū)

? ? 雙寫緩沖區(qū)

? ? 撤銷日志

這些東西究竟是啥玩意兒?我也不知道233

如果是MyISAM存儲引擎外永,直接拷貝.frm崎脉、.MYD、.MYI到新的庫文件夾下就行了伯顶,簡直方便快捷簡單易用囚灼。但現(xiàn)在MySQL在不配置的情況下默認(rèn)的存儲引擎是InnoDB,說明它還是有優(yōu)越性在的祭衩。具體兩者的差異有空另起一篇或者網(wǎng)上查查資料吧灶体,三言兩語說不清楚,這里就不展開了掐暮。

當(dāng)然蝎抽,能點進這篇博客的肯定是想看InnoDB表的數(shù)據(jù)恢復(fù),尤其是丟失了.ibdata文件的情況下路克。

一樟结、恢復(fù)表結(jié)構(gòu)

首要的一件事情就是恢復(fù)表結(jié)構(gòu),如果很幸運地保留了當(dāng)時的表結(jié)構(gòu)精算,此步可跳過瓢宦。

1.1 隨意創(chuàng)建一張同名表

CREATE TABLE weibo_tweets(a int)ENGINE=InnoDB;

? ? 1

1.2 關(guān)閉mysql服務(wù)

net stop mysql

1.3 復(fù)制備份的.frm覆蓋新建的表.frm

1.4 開啟mysql服務(wù)

net start mysql

1.5 在mysql安裝目錄data文件夾下用文本編輯器打開.err文件

這是mysql的錯誤日志,找到諸如

2018-01-09T08:19:46.170814Z 3 [Warning] InnoDB: Table data_rec/weibo_tweets contains 1 user defined columns in InnoDB, but 6 columns in MySQL. Please check INFORMATION_SCHEMA.INNODB_SYS_COLUMNS

的記錄,發(fā)現(xiàn)原表擁有6個字段灰羽。

1.6 刪除當(dāng)前表驮履,新建一張擁有6個字段的同名表

mysql> DROP TABLE weibo_tweets;

Query OK, 0 rows affected (0.26 sec)

mysql>CREATE TABLE weibo_tweets(a1 int,a2 int,a3 int,a4 int,a5 int,a6 int)ENGINE=InnoDB;

Query OK, 0 rows affected (0.66 sec)

? ? 1

? ? 2

? ? 3

? ? 4

? ? 5

1.7 重復(fù)步驟1.2-1.3

修改配置文件my.ini在[mysqld]下添加/修改innodb_force_recovery=6

1.8 啟動mysql服務(wù),查看表結(jié)構(gòu)谦趣,發(fā)現(xiàn)表結(jié)構(gòu)已經(jīng)恢復(fù)

mysql> desc weibo_tweets;

+-------------+---------------+------+-----+-------------------+----------------+

| Field? ? ? | Type? ? ? ? ? | Null | Key | Default? ? ? ? ? | Extra? ? ? ? ? |

+-------------+---------------+------+-----+-------------------+----------------+

| id? ? ? ? ? | int(11)? ? ? | NO? | PRI | NULL? ? ? ? ? ? ? | auto_increment |

| uid? ? ? ? | varchar(10)? | NO? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? |

| content? ? | varchar(1000) | YES? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? |

| pub_time? ? | varchar(20)? | YES? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? |

| tool? ? ? ? | varchar(50)? | YES? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? |

| create_time | datetime? ? ? | YES? |? ? | CURRENT_TIMESTAMP |? ? ? ? ? ? ? ? |

+-------------+---------------+------+-----+-------------------+----------------+

6 rows in set, 1 warning (0.01 sec)

導(dǎo)出表結(jié)構(gòu)疲吸,在命令提示符下輸入

mysqldump -uroot -proot data_rec weibo_twets > e:\tweets.sql

在.sql文件中找到建表語句。

或者也可以用數(shù)據(jù)庫管理軟件如navicat中找到這張表前鹅,在對象信息中復(fù)制下DDL選項卡里的內(nèi)容摘悴。

1.9 停止mysql服務(wù),修改配置文件my.ini

修改innodb_force_recovery=0或者直接注釋掉舰绘。

2.0 啟動mysql服務(wù)蹂喻,刪掉這張表葱椭,用獲得的建表語句新建表

至此,表結(jié)構(gòu)已經(jīng)完全恢復(fù)口四。

二孵运、恢復(fù)表數(shù)據(jù)

2.1 分離表空間

使當(dāng)前.ibd的數(shù)據(jù)文件和.frm分離。

ALTER TABLE weibo_tweets DISCARD TABLESPACE;

2.2 復(fù)制備份的.ibd文件覆蓋新的表數(shù)據(jù)

2.3 重新建立新的連接

ALTER TABLE weibo_tweets IMPORT TABLESPACE;

至此蔓彩,數(shù)據(jù)恢復(fù)完畢治笨。

三、后話

網(wǎng)上有人用vim以16進制打開.ibd文件赤嚼,查看表空間ID后旷赖,將備份.ibd文件覆蓋后修改表空間ID為新的.ibd文件的ID,也可以重新建立數(shù)據(jù)文件和表空間的連接恢復(fù)數(shù)據(jù)更卒。

Windows環(huán)境下可以用WinHex達(dá)成此目的等孵,聽起來也是可行的。

我是一介懶人就不嘗試了蹂空,有興趣余力的大佬可以試試俯萌。

---------------------

作者:喜碧夫人聽眾

來源:CSDN

原文:https://blog.csdn.net/zhchs2012/article/details/79013951

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接上枕!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咐熙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辨萍,更是在濱河造成了極大的恐慌糖声,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件分瘦,死亡現(xiàn)場離奇詭異蘸泻,居然都是意外死亡,警方通過查閱死者的電腦和手機嘲玫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門悦施,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人去团,你說我怎么就攤上這事抡诞。” “怎么了土陪?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵昼汗,是天一觀的道長。 經(jīng)常有香客問我鬼雀,道長顷窒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮鞋吉,結(jié)果婚禮上鸦做,老公的妹妹穿的比我還像新娘。我一直安慰自己谓着,他們只是感情好泼诱,可當(dāng)我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赊锚,像睡著了一般治筒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舷蒲,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天矢炼,我揣著相機與錄音,去河邊找鬼阿纤。 笑死,一個胖子當(dāng)著我的面吹牛夷陋,可吹牛的內(nèi)容都是我干的欠拾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼骗绕,長吁一口氣:“原來是場噩夢啊……” “哼藐窄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起酬土,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤荆忍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撤缴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刹枉,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年屈呕,在試婚紗的時候發(fā)現(xiàn)自己被綠了微宝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡虎眨,死狀恐怖蟋软,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗽桩,我是刑警寧澤岳守,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站碌冶,受9級特大地震影響湿痢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扑庞,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一蒙袍、第九天 我趴在偏房一處隱蔽的房頂上張望俊卤。 院中可真熱鬧,春花似錦害幅、人聲如沸消恍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狠怨。三九已至,卻和暖如春邑遏,著一層夾襖步出監(jiān)牢的瞬間佣赖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工记盒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憎蛤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓纪吮,卻偏偏與公主長得像俩檬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碾盟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容