了解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

转载于:https://blog.51cto.com/myceo/737216

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

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

    了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm ...

  2. MySQL数据操作与查询笔记 • 【第2章 表结构管理】

    全部章节   >>>> 本章目录 2.1 关系模型与数据表 2.1.1 关系模型 2.1.2 数据表 2.2 MySQL 数据类型 2.2.1 MySQL 常见数据类型 2.2 ...

  3. Spring Boot + JPA +MySQL 数据操作及示例环境搭建(自动建表)

    JPA 是Java官方提供的数据持久的统一API , 是一个接口标准,并没有具体实现. JPA的实现常见的有: Hibernate TopLink (Eclipse Link) Spring Boot ...

  4. 数据字典恢复mysql数据_恢复之数据字典和控制文件不一致的恢复(一)

    在执行恢复后,应该检查数据库的alert文件,看是否出现控制文件中的数据文件名称和数据字典中数据文件名称无法一一对应的现象. 这篇文章描述通过RESETLOGS方式打开数据库时,如果发现不一致情况及解 ...

  5. mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 from django.db importmodelsclassuserinfo(models ...

  6. MySQL数据库基础学习小终结:连接查询、表结构的修改、约束条件、MySQL与python交互

    目录 一.连接查询 1.内连接 2.外连接 二.表结构的修改--alter 1.修改表名 2.修改字段名 3.修改字段类型--modify 4.添加字段 (1)添加日期字段:datetime (2)e ...

  7. Spring Boot + JPA +MySQL 数据操作及示例环境搭建(手动建表建类)

    本篇演示如何搭建Spring Boot+JPA + MySQL 的开发环境, 以及使用JPA进行基本的查询. 环境搭建 1. Spring Boot项目创建 Spring Boot 项目的搭建参考: ...

  8. Mysql 数据血缘关系图_hive血缘关系之输入表与目标表的解析

    接了一个新需求:需要做数据仓库的血缘关系.正所谓兵来将挡水来土掩,那咱就动手吧. 血缘关系是数据治理的一块,其实有专门的第三方数据治理框架,但考虑到目前的线上环境已经趋于稳定,引入新的框架无疑是劳民伤 ...

  9. impdp导入表结构和表数据_EXP COMPRESS以及EXP/IMP EXPDP/IMPDP导入表结构注意-阿里云开发者社区...

    EXP COMPRESS以及EXP/IMP EXPDP/IMPDP导入表结构注意 重庆八怪 2014-09-10 987浏览量 简介: 关于EXP COMPRESS参数 一直对这个参数有些疑惑.当然此 ...

最新文章

  1. python中print的本质_Python基础语法全解
  2. Spring Boot——集成七牛云OSS对象存储SDK解决方案
  3. scrapy使用pipeline保存不同的表单Item到数据库、本地文件
  4. Hyper-v 2.0
  5. jad的用法(反编译某目录下所有class)
  6. oracle驱动包如何看版本,查看JDBC驱动版本
  7. 概要、详细设计文档内容简述
  8. 模糊C均值聚类(FCM)算法概述
  9. Mac上的GIF制作软件推荐
  10. 揭秘:云控系统运行原理,有效规避风控
  11. 附加题——求n的阶乘和
  12. 通俗易懂理解几何光学(六)光学系统的像质评价
  13. 文件上传插件WebUploader的使用
  14. Ubuntu / Python / Mega自动同步监控照片
  15. math.h中常用的函数(C语言)
  16. 让别人叫爸爸的恶搞程序,第一天写程序,免费分享给大家,希望喜欢的一键三连多多支持。
  17. EasyRTSPServer流媒体服务协议网络视频直播平台对接海康NVR音频不能正常播问题解决方案
  18. 口袋服务器最新版,我的世界口袋版
  19. C/C++头文件汇总
  20. Automa实现PowerBI大屏滚动播放

热门文章

  1. OpenGL 纹理学习总结
  2. Wireshark数据包分析之DHCP协议包解读
  3. 利用DHCP,http,tftp,pxe实现批量自动化部署系统
  4. 拯救莫莉斯[GDOI2014]
  5. 怎样使用CSS3媒体查询(Media Queries)制作响应式网站
  6. RMAN备份与ORA-19625ORA-19502
  7. apache .htaccess 禁止访问某目录方法
  8. SQL XML 字段操作
  9. 一、你要拥有自己的服务器
  10. 列出AD用户Lockout 位置