MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)

转载 2013年12月02日 15:41:58
了解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
             

仅使用MYSQL文件.frm恢复表结构

了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据 表的元数据(meta)信息,包括表结构的定义等,.fr...
  • lyj1101066558
  • lyj1101066558
  • 2016年06月21日 15:41
  • 2393

mysql使用“.frm”文件恢复表结构

mysql创建每张表后都会在“mysql安装目录/data/数据库名/”目录下创建一个“表名.frm”文件。 该.frm文件并不能直接打开,但是它可以帮助你恢复你的表结构~~ 具体操作如下: 我现在准...
  • u014253480
  • u014253480
  • 2016年02月12日 18:35
  • 3287

怎么将后缀为.opt,.frm,.myd,.myi文件还原或者是导入mySQL中

其实这个问题的解决方案很简单,把这些文件连同这些文件所在的文件夹原封不动地复制到你的 mysql 文件夹下的 data 里面 (在我的电脑里面是D:\xampp\mysql\data), 然后你进...
  • whq19890827
  • whq19890827
  • 2014年10月19日 10:24
  • 2157

MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据

一次恢复数据库表结构和数据的实战,仅以此贴作为记录。   由于,前几天我们使用的数据库被入侵(顺便鄙视一下安全管理人员),数据库中的表都显示不存在(仅剩一个黑客自建的----qq_xxxxx的表,但物...
  • hi__study
  • hi__study
  • 2016年12月06日 17:17
  • 13285

mysql未通过正常导出,服务器挂掉时通过frm文件恢复遇到问题

这里说的MySql恢复数据库,是指没有通过正常备份的情况下,通过Mysql保存的数据文件如何恢复数据库...
  • yangpeng201203
  • yangpeng201203
  • 2014年11月03日 14:07
  • 1435

如何利用.frm.idb恢复InnoDB

利用.frm.idb恢复InnoDB时,需要准备一下几个文件, my.cnf, ibdata1, *.frm  和*.idb  首先我们要检查一下my.cnf 里面关于InnoDB的配置, 如果是个...
  • dongli_816
  • dongli_816
  • 2017年02月05日 11:50
  • 1137

用mysql Utilitiesdefault mode打开.frm文件,找回建表语句

很久没有用mysql了,重装系统后把ib_logfile0、ib_logfile1都删除了,重新下载mysql安装包拷贝这两个文件,msyql服务能起来了,但是表打不开,提示“1146 - Table...
  • flywithtn
  • flywithtn
  • 2016年10月26日 22:26
  • 904

mysql——在没有ibdata1文件的情况下用*.frm和*.ibd文件恢复数据库

mysql 数据恢复
  • CcMark
  • CcMark
  • 2016年12月15日 18:36
  • 1871

MySql数据库通过idb和frm恢复

阿里云的数据不小心误删了3000多条,然后提心吊胆的整夜整夜睡不着(才怪)。然后拿到阿里云的数据后, 恢复云数据库MySQL的备份文件到自建数据库...
  • zhouhaisunny
  • zhouhaisunny
  • 2017年08月22日 23:39
  • 646

数据库备份,只有.frm文件,却没有.MYD 和.MYI文件的原因

今天在学习MySQL的时候,发现新建一个数据库表的时候,表只对应一个.frm文件,却没有.MYD 和.MYI文件。 经过一番查找之后才发现,我本地的MySQL存储表的时候,使用的默认数据库存储引擎是...
  • kissing7
  • kissing7
  • 2014年09月12日 12:33
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)
举报原因:
原因补充:

(最多只允许输入30个字)