瞭解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 |
MYSQL數據文件--.frm文件(只有.frm文件時的表結構恢復)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
sql語法、關係建模
死瘦宅
2019-02-24 22:35:22
MySQL 事務、函數、觸發器、數據庫備份、權限管理
死瘦宅
2019-02-24 22:35:12
MongoDB索引優化詳解
geekpy
2019-02-24 14:20:06
Sql server中一些Select檢索高級用法
wbzjacky
2019-02-24 13:12:37
如何釋放已刪除的InnoDB磁盤空間
lvrenX
2019-02-24 13:04:33
將frm,myi,myd文件打包成sql文件
jason1982
2019-02-24 12:57:22
某熊的技術之路指北 ☯
王下邀月熊_Chevalier
2019-02-23 16:23:03
安裝SQL數據庫之一些常見故障
179390988
2019-02-23 14:05:54
安裝SQL數據庫之補丁安裝常見問題
179390988
2019-02-23 14:05:54
PL/SQL 取幾段查詢結果的交集, 查詢費用報表的條件(R12.1.1)所對應的費用報表規則
tkchw4
2019-02-23 14:05:35
oracle em啓動
huchazsu
2019-02-23 14:01:49
oracle 啓動歸檔模式
huchazsu
2019-02-23 14:01:14
postdrop: create file maildrop/xxx: Permission denied
lingping
2019-02-23 14:05:54
當您嘗試在 Outlook 中打開或保存電子郵件附件時出現錯誤消息:“無法創建文件
lingping
2019-02-23 14:05:54