数据恢复利器:通过frm文件恢复数据表的sql结构语句

如果数据库崩溃又没有做数据备份,只有.frm表结构文件,怎么做表的结构恢复?下面介绍两种方法

了解MYSQL的都知道,在MYSQL中建立任何一张数据表,在其数据目录对应的数据库目录下都有对应表的.frm文件,.frm文件是用来保存每个数据表的元数据(meta)信息,包括表结构的定义等,.frm文件跟数据库存储引擎无关,也就是任何存储引擎的数据表都必须有.frm文件,命名方式为数据表名.frm,如user.frm. .frm文件可以用来在数据库崩溃时恢复表结构。

第一种方法:手动恢复

工具/原料

  • MYSQL数据库.frm文件

  • 命令行工具

一、InnoDB表结构的恢复

  1. 假定: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)

  2. 在新的正常工作的MYSQL环境下建立一个数据库,比如aa.

  3. 在aa数据库下建立同名的数据表test_innodb,表结构随意,这里只有一个id字段,操作过程片段如下:

     

    mysql> create table test_innodb (id bigint not null)engine=InnoDB;

    Query OK, 0 rows affected (0.09 sec)

  4. 停止mysql服务器,将系统崩溃后留下的test_innodb.frm文件拷贝到新的正常数据库的数据目录aa下,覆盖掉下边同名的frm文件,重新启动MYSQL服务。

    END

二. MyISAM表结构的恢复

  1. 同样先假定需要恢复的表的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)

  2. 直接将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命令报错。

  3. 在与test_myisam.frm同一目录建立以下2个文件,文件内容可以为空:

     

    test_myisam.MYD test_myisam.MYI

  4.  在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)

     

    根据结果可以知道,恢复命令执行成功

第二种方法:利用工具快速恢复

 

下载使用:dbseeker_frm1.0.zip 工具

下载地址:

解压后执行: dbseeker_frm.jar文件

选择要恢复的frm文件即可以生成对应的SQL建表语句。

要通过.frm文件恢复MySQL结构,可以尝试以下方法: 1. 创建一个与.frm文件相关的新: - 将原始的.frm文件从备份或另一个MySQL实例中复制到目标服务器的MySQL数据目录中。 - 在MySQL命令行界面或客户端工具中,使用CREATE TABLE语句创建一个新,并指定.frm文件作为定义文件。例如: ``` CREATE TABLE `your_table_name` ( -- 列定义 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC COMMENT='Table Comment' DATA DIRECTORY='your_data_directory' INDEX DIRECTORY='your_index_directory' TABLESPACE `your_tablespace_name` /*!50100 PARTITION BY RANGE () SUBPARTITION BY HASH () SUBPARTITIONS 1 (PARTITION your_partition_name VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB) */ /*!80016 SHARD_ROW_ID_BITS = 6 */ ; ``` - 替换`your_table_name`为您想要恢复名,并根据需要调整其他选项。 2. 执行SHOW TABLES语句验证新是否已成功创建。例如: ``` SHOW TABLES; ``` 请注意,这种方法只能恢复结构,不包括数据和索引。如果您需要恢复完整的,包括数据和索引,请确保同时拥有相应的.ibd文件,并将其放置在正确的位置。 如果拥有相关的.ibd文件,可以尝试将它们放置在正确的数据目录中,并重启MySQL服务,以使MySQL能够识别和加载这些.ibd文件。然后,您可以尝试访问数据,或使用工具mysqlfrm来从.ibd和.frm文件恢复结构和数据。 在任何情况下,建议在进行任何恢复操作之前先进行备份,并参考MySQL官方文档、社区或寻求专业支持以获取更详细和针对性的帮助
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程指南针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值