通過替換frm檔案方式修改表結構

haoge0205發表於2015-12-08
版本:5.6.16

在自己的虛擬環境中,測試建立一個表,表結構如下:
mysql> drop table yoon_temp;
Query OK, 0 rows affected (0.09 sec)


mysql> show create table yoon\G
*************************** 1. row ***************************
       Table: yoon
Create Table: CREATE TABLE `yoon` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


再建立一個相同的表結構,name varchar(30) 為30,並通過替換.frm來實現yoon表的欄位修改:
mysql> show create table yoon_temp\G
*************************** 1. row ***************************
       Table: yoon_temp
Create Table: CREATE TABLE `yoon_temp` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


不小心直接刪除yoon_temp.frm檔案,無法替換,在資料庫上刪除yoon_temp提示表不存在:
[root@hank-yoon yoon]# rm -rf yoon_temp.frm

mysql> show tables;
+----------------+
| Tables_in_yoon |
+----------------+
| yoon           |
+----------------+
1 row in set (0.00 sec)


刪除表:
mysql> drop table yoon_temp;
ERROR 1051 (42S02): Unknown table 'yoon.yoon_temp'

重新建立表:
mysql> create table yoon_temp (id int,name varchar(30));
ERROR 1813 (HY000): Tablespace for table '`yoon`.`yoon_temp`' exists. Please DISCARD the tablespace before IMPORT.

mysql> alter table yoon_temp DISCARD tablespace;
ERROR 1146 (42S02): Table 'yoon.yoon_temp' doesn't exist


在目錄下通過yoon.frm拷貝建立yoon_temp.frm
[root@hank-yoon yoon]# cp  yoon.frm  yoon_temp.frm

[root@hank-yoon yoon]# chown mysql.mysql yoon_temp.frm

檢視錶:
mysql> show tables;
+----------------+
| Tables_in_yoon |
+----------------+
| yoon           |
| yoon_temp      |
+----------------+
2 rows in set (0.00 sec)


mysql> show create table yoon_temp\G
*************************** 1. row ***************************
       Table: yoon_temp
Create Table: CREATE TABLE `yoon_temp` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


mysql> drop table yoon_temp;
Query OK, 0 rows affected (0.03 sec)

重新建立再測試:
mysql> create table yoon_temp (id int,name varchar(30));
Query OK, 0 rows affected (0.02 sec)

當表結構檔案不小心刪除時,可通過其他表結構來建立進行修復刪除,表結構要相同,欄位varcahr(xxx) xxx大小不同無所謂,也間接實現了通過替換frm的方式修改表結構。















來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-1868545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章