innodb表,如何利用存在的*.FRM恢复表结构(不讨论数据)

问题描述:innodb表,如何利用存在的*.FRM恢复表结构(不讨论数据)

模拟环境如下:[以下环境与真实环境还是有差距的]
[root@jj-svn160_231 bin]# ./mysql -uroot -pkongzhong
mysql> use test;
Database changed
mysql> create table a(a int) engine=innnodb;
Query OK, 0 rows affected, 2 warnings (0.05 sec)
下面进入数据存放目录,讲原文件重命名
[root@jj-svn160_231 test]# ls
a.frm  a.ibd
[root@jj-svn160_231 test]# mv a.frm a.frm.bak
[root@jj-svn160_231 test]# mv a.ibd a.ibd.bak
重启数据库[真实情况,此处是无法启动的]
[root@jj-svn160_231 bin]# /etc/init.d/mysqld restart
解决方案:
1.创建一个新数据库,库下无表:
   mysql> create database kz;
2.创建一张同名,同引擎的表,字段可以不限,如下:
   mysql> use kz;
   mysql> create table a(a int,b int,c int,d int) engine=innnodb;
3.将原a.frm文件复制到刚才新建的数据库目录下,并覆盖原表结构
  [root@jj-svn160_231 test]# cp a.frm.bak  ../kz/a.frm
4.在参数文件,添加一个参数:

    innodb_force_recovery=1
5.重启数据库:
    [root@jj-svn160_231 bin]# /etc/init.d/mysqld restart
6.登录数据库,查看表结构信息
    [root@jj-svn160_231 bin]# ./mysql -uroot -pkongzhong
    mysql> use kz;
mysql> show tables;
+————–+
| Tables_in_kz |
+————–+
| a            |
+————–+
mysql> show create table a;
+——-+————————————————————————————–+
| Table | Create Table                                                                         |
+——-+————————————————————————————–+
| a     | CREATE TABLE `a` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+——-+————————————————————————————–+
         至此,表结构就已经恢复好了。其实后面还需要与原表空间关联,比较复杂,暂不讨论

Author: Michael

关注数据分析,挖掘数据金矿。

Leave a Reply

Your email address will not be published. Required fields are marked *