MYSQL數(shù)據(jù)文件--.frm文件(表結(jié)構(gòu)恢復(fù))

[重要通告]如您遇疑難雜癥,本站支持知識(shí)付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時(shí)間哦!

了解MYSQL的都知道,在MYSQL中建立任何一張數(shù)據(jù)表,在其數(shù)據(jù)目錄對(duì)應(yīng)的數(shù)據(jù)庫目錄下都有對(duì)應(yīng)表的.frm文件,.frm文件是用來保存每個(gè)數(shù)據(jù)表的元數(shù)據(jù)(meta)信息,包括表結(jié)構(gòu)的定義等,.frm文件跟數(shù)據(jù)庫存儲(chǔ)引擎無關(guān),也就是任何存儲(chǔ)引擎的數(shù)據(jù)表都必須有.frm文件,命名方式為數(shù)據(jù)表名.frm,如user.frm. .frm文件可以用來在數(shù)據(jù)庫崩潰時(shí)恢復(fù)表結(jié)構(gòu)。

下面說說如何通過.frm文件恢復(fù)數(shù)據(jù)表結(jié)構(gòu)。

一. InnoDB表結(jié)構(gòu)的恢復(fù)

假定:MYSQL數(shù)據(jù)庫已經(jīng)崩潰,目前只有對(duì)應(yīng)表的frm文件,大家都知道,frm文件無法通過文本編輯器查看,因?yàn)槿绻换謴?fù),基本上來說對(duì)我們沒什么用。這里我們?yōu)榱藴y(cè)試,假定該文件為test_innodb.frm.

該表創(chuàng)建腳本如下:

mysql> create table test_innodb

-> (A int(11) default NULL,
-> B varchar(30) default NULL,
-> C date default NULL) engine=innodb;
Query OK, 0 rows affected (0.05 sec)

恢復(fù)方法介紹(過程):

1. 在新的正常工作的MYSQL環(huán)境下建立一個(gè)數(shù)據(jù)庫,比如aa.

2. 在aa數(shù)據(jù)庫下建立同名的數(shù)據(jù)表test_innodb,表結(jié)構(gòu)隨意,這里只有一個(gè)id字段,操作過程片段如下:

mysql> create table test_innodb (id bigint not null)engine=InnoDB;
Query OK, 0 rows affected (0.09 sec)

mysql> show tables;
+--------------+
| Tables_in_aa |
+--------------+
| test_innodb |
+--------------+
2 rows in set (0.00 sec)

mysql> desc test_innodb;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | bigint(20) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

3.停止mysql服務(wù)器,將系統(tǒng)崩潰后留下的test_innodb.frm文件拷貝到新的正常數(shù)據(jù)庫的數(shù)據(jù)目錄aa下,覆蓋掉下邊同名的frm文件:

4.重新啟動(dòng)MYSQL服務(wù)。

5.測(cè)試下是否恢復(fù)成功,進(jìn)入aa數(shù)據(jù)庫,用desc命令測(cè)試下:

mysql> desc test_innodb;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| A | int(11) | YES | | NULL | |
| B | varchar(30) | YES | | NULL | |
| C | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

OK,發(fā)現(xiàn)表結(jié)構(gòu)已經(jīng)恢復(fù)過來了。

二. MyISAM表結(jié)構(gòu)的恢復(fù)。

MyISAM類型的表恢復(fù)相對(duì)比較簡(jiǎn)單。

同樣先假定需要恢復(fù)的表的FRM文件為test_myisam.frm,表結(jié)構(gòu)為

mysql> create table test_myisam
-> (A int(11) default NULL,
-> B varchar(30) default NULL,
-> C date default NULL) engine=myisam;
Query OK, 0 rows affected (0.05 sec)

恢復(fù)過程如下:

1. 直接將test_myisam.frm拷貝到正常數(shù)據(jù)庫對(duì)應(yīng)的數(shù)據(jù)目錄下。這時(shí)測(cè)試

mysql> show tables;
+--------------+
| Tables_in_aa |
+--------------+
| test_innodb |
| test_myisam |
+--------------+
3 rows in set (0.00 sec)

mysql> desc test_myisam;
ERROR 1017 (HY000): Can't find file: 'test_myisam' (errno: 2)

發(fā)現(xiàn)只能通過show tables命令看見表名,但是表結(jié)構(gòu)還是沒有恢復(fù),desc命令報(bào)錯(cuò)。

2. 在與test_myisam.frm同一目錄建立以下2個(gè)文件,文件內(nèi)容可以為空:

test_myisam.MYD test_myisam.MYI

3. 在MYSQL命令行使用MYSQL本身的數(shù)據(jù)表恢復(fù)命令repair命令恢復(fù)表,如下:

mysql> repair table test_myisam USE_FRM;
+-----------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| aa.test_myisam | repair | status | OK |
+-----------------+--------+----------+----------+
1 row in set (0.00 sec)

根據(jù)結(jié)果可以知道,恢復(fù)命令執(zhí)行成功,下邊用desc命令測(cè)試下:

mysql> desc test_myisam;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| A | int(11) | YES | | NULL | |
| B | varchar(30) | YES | | NULL | |
| C | date | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)

果然恢復(fù)成功了。

也可以用show create table命令測(cè)試下:

mysql> show create table test_myisam;
+--------------+-----------------------------------------------------------------
----------------------------------------------------------------------+
| Table | Create Table
|
+--------------+-----------------------------------------------------------------
----------------------------------------------------------------------+
| test_myisam | Create TABLE `test_myisam` (
`A` int(11) DEFAULT NULL,
`B` varchar(30) DEFAULT NULL,
`C` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+--------------+-----------------------------------------------------------------
----------------------------------------------------------------------+

在恢復(fù)MyISAM表結(jié)構(gòu)時(shí),提到MYD文件和MYI文件,這兩個(gè)文件都專屬于MyISAM存儲(chǔ)引擎的,前者用來保存MyISAM表的數(shù)據(jù),后者用來存放MyISAM表的索引信息。具體在以后的日志再做詳細(xì)介紹,這里不再贅述。

問題未解決?付費(fèi)解決問題加Q或微信 2589053300 (即Q號(hào)又微信號(hào))右上方掃一掃可加博主微信

所寫所說,是心之所感,思之所悟,行之所得;文當(dāng)無敷衍,落筆求簡(jiǎn)潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責(zé)聲明,若由于商用引起版權(quán)糾紛,一切責(zé)任均由使用者承擔(dān)。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對(duì)《免責(zé)聲明》全部?jī)?nèi)容的認(rèn)可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來自互聯(lián)網(wǎng)收集,僅供用于學(xué)習(xí)和交流,請(qǐng)勿用于商業(yè)用途。如有侵權(quán)、不妥之處,請(qǐng)聯(lián)系站長(zhǎng)并出示版權(quán)證明以便刪除。 敬請(qǐng)諒解! 侵權(quán)刪帖/違法舉報(bào)/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學(xué)習(xí),歡迎贊賞評(píng)論,如有謬誤,請(qǐng)聯(lián)系指正;轉(zhuǎn)載請(qǐng)注明出處: » MYSQL數(shù)據(jù)文件--.frm文件(表結(jié)構(gòu)恢復(fù))

發(fā)表回復(fù)

本站承接,網(wǎng)站推廣(SEM,SEO);軟件安裝與調(diào)試;服務(wù)器或網(wǎng)絡(luò)推薦及配置;APP開發(fā)與維護(hù);網(wǎng)站開發(fā)修改及維護(hù); 各財(cái)務(wù)軟件安裝調(diào)試及注冊(cè)服務(wù)(金蝶,用友,管家婆,速達(dá),星宇等);同時(shí)也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情