MYSQL數據文件--.frm文件(只有.frm文件時的表結構恢復)

瞭解MYSQL的都知道,在MYSQL中創建任何一張數據表,在其數據目錄對應的數據庫目錄下都有對應表的.frm文件,.frm文件是用來保存每一個數據表的元數據(meta)信息,包括表結構的定義等,.frm文件跟數據庫存儲引擎無關,也就是任何存儲引擎的數據表都必須有.frm文件,命名方式爲數據表名.frm,如user.frm. .frm文件能夠用來在數據庫崩潰時恢復表結構。

下面說說如何經過.frm文件恢復數據表結構。

一. InnoDB表結構的恢復

假定:MYSQL數據庫已經崩潰,目前只有對應表的frm文件,你們都知道,frm文件沒法經過文本編輯器查看,由於若是不恢復,基本上來講對咱們沒什麼用。這裏咱們爲了測試,假定該文件爲test_innodb.frm.

該表建立腳本以下:

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)

恢復方法介紹(過程):

1. 在新的正常工做的MYSQL環境下創建一個數據庫,好比aa.

2. 在aa數據庫下創建同名的數據表test_innodb,表結構隨意,這裏只有一個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服務器,將系統崩潰後留下的test_innodb.frm文件拷貝到新的正常數據庫的數據目錄aa下,覆蓋掉下邊同名的frm文件:

4.從新啓動MYSQL服務。

5.測試下是否恢復成功,進入aa數據庫,用desc命令測試下:

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,發現表結構已經恢復過來了。

二. MyISAM表結構的恢復。

MyISAM類型的表恢復相對比較簡單。

一樣先假定須要恢復的表的FRM文件爲test_myisam.frm,表結構爲

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)

恢復過程以下:

1. 直接將test_myisam.frm拷貝到正常數據庫對應的數據目錄下。這時測試

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)

發現只能經過show tables命令看見表名,可是表結構仍是沒有恢復,desc命令報錯。

2. 在與test_myisam.frm同一目錄創建如下2個文件,文件內容能夠爲空:

test_myisam.MYD test_myisam.MYI

3. 在MYSQL命令行使用MYSQL自己的數據表恢復命令repair命令恢復表,以下:

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)

根據結果能夠知道,恢復命令執行成功,下邊用desc命令測試下:

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)

果真恢復成功了。

也能夠用show create table命令測試下:

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 |


在恢復MyISAM表結構時,提到MYD文件和MYI文件,這兩個文件都專屬於MyISAM存儲引擎的,前者用來保存MyISAM表的數據,後者用來存放MyISAM表的索引信息。具體在之後的日誌再作詳細介紹,這裏再也不贅述。
 From:
http://blog.sina.com.cn/s/blog_5d3da3280100hymn.html
相關文章
相關標籤/搜索