大堆的后缀为.frm、.opt、.myi、myd的MySql数据文件导入Mysql

本文介绍如何使用.frm和.ibd文件恢复MySQL表结构和数据,包括创建临时表、配置恢复参数、导入表空间等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql根据.frm.idb恢复数据表和数据(版本:MYSQL5.7.20)

总体分为两部分:

1.恢复数据表结构

a.根据要恢复的数据库创建一个新的同名数据库创建一个同名的数据表,因为不知道表的结构,表内的数据随便创建一个就行

         简单的例子:我要恢复名为:animalhealth的数据库  名为:tb_breed.frm表

         命令行代码:

mysql>create database animalhealth;

QueryOK, 1 row affected (0.00 sec)

mysql 的data目录下会有一个animalhealth文件夹

mysql>use animalhealth;

Databasechanged

mysql>create table tb_breed (id int)ENGINE=InnoDB DEFAULT CHARSET=utf8;

QueryOK, 0 rows affected (0.33 sec)

之行结束后mysql 的data目录下如图所示

 

然后停止mysql服务

然后将要恢复的.frm文件复制过来覆盖刚刚创建的.frm文件

在my.ini里增加innodb_force_recovery=4这句,如果有就改成4,4不行换其他1-6.

然后保存重启数据库

然后查看表里的内容出现这个错误

针对这个问题,我们可以通过查看mysql的日志文件来解决,查看mysql安装目录下的data文件夹里面.err结尾的文件,你会发现出现下面所示的错误信息:[Warning] InnoDB: Table wangyi/songlyric contains 1 user definedcolumns in InnoDB, but 6 columns in MySQL.原来是因为,我们要恢复的表有6个字段,而我们在创建表的时候只创建了1个字段。

解决方案:删除songlyric表重新创建一个包含6个字段的表,具体这6个字段是什么不用管的。具体执行过程为使用net stop mysql停掉服务,然后在配置文件my.ini中将innodb_force_recovery = 6注释掉(#或;均可),再net start mysql启动服务。接着在控制台先执行drop tablesonglyric;删除表,再执行创建表语句,我执行的是下面的创建表语句:create tablesonglyric(id int,id1 int,id2 int,id3 int,id4 int,id5 int);

紧接着按照前面的方式,使用net stopmysql关闭数据库服务,然后用需要恢复的songlyric.frm覆盖这个新建的wangyi数据库的songlyric表的物理文件songlyric.frm,接着对配置文件(my.ini)设置innodb_force_recovery = 6,然后使用net start mysql启动服务,接着使用:descsonglyric查看该表结构,输出下面结果表示恢复表结构成功:

 

mysql> show create table tb_breed;

| Table   | Create Table                                                                                                                                                                                                                                                                                                                               |

+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| tb_breed | CREATE TABLE `tb_breed` (

 `ID` int(11) NOT NULL AUTO_INCREMENT,

 `BreedName` varchar(255) DEFAULT NULL,

 `IntelliSense` varchar(255) DEFAULT NULL,

 `TimeStamps` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP,

 `IsDelete` tinyint(4) DEFAULT NULL,

 PRIMARY KEY (`ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set, 1 warning (0.12 sec)

再然后删除刚才的表mysql> drop table tb_breed;

在my.ini里innodb_force_recovery=4这句前面加上分号注释掉

根据刚才恢复的表结构创建一个新表,建表语句后加上 ROW_FORMAT=COMPACT

CREATE TABLE `tb_breed` (

   ->   `ID` int(11) NOT NULLAUTO_INCREMENT,

   ->   `BreedName` varchar(255)DEFAULT NULL,

   ->   `IntelliSense`varchar(255) DEFAULT NULL,

   ->   `TimeStamps` timestampNULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

   ->   `IsDelete` tinyint(4)DEFAULT NULL,

   ->   PRIMARY KEY (`ID`)

-> )ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

新表创建成功后关闭mysql

在my.ini里innodb_force_recovery=4这句前面加上分号去掉

 

 

2.恢复数据

恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:

alter table “要恢复的数据库名” discard tablespace; 接着执行net stop mysql停掉服务,将需要恢复的.ibd文件覆盖这个新建的数据库的表的物理文件.ibd,执行net start mysql开启服务。 将复制过来的“要恢复的文件的”.ibd文件与“要恢复的文件的”.frm文件发生联系。具体执行下面命令:

alter table “要恢复的数据库名” import tablespace; 这时候通过navicat查看数据表,你会发现数据已经成功恢复啦啦啦。

 


在使用 Navicat Premium 15 导入 MySQL 的 `.frm`、`.MYD`、`.MYI` 文件时,需要理解这些文件的性质以及 Navicat 本身的功能限制。 ### 三级标题:理解 `.frm`、`.MYD`、`.MYI` 文件 `.frm` 文件MySQL 表的结构定义文件,`.MYD`(MYData)是 MyISAM 存储引擎的数据文件,而 `.MYI`(MYIndex)则是索引文件。这些文件通常用于 MyISAM 表的物理存储,无法直接通过 Navicat 等图形化工具导入,因为它们不是标准的 SQL 脚本或可移植的数据文件[^2]。 ### 三级标题:Navicat Premium 15 的限制 Navicat Premium 15 是一款用于数据库管理的图形化工具,支持多种数据库类型,包括 MySQL。它主要用于执行 SQL 脚本、导入导出 `.sql` 文件、进行数据库同步等操作。然而,Navicat 本身并不支持直接导入 `.frm`、`.MYD`、`.MYI` 文件,因为这些文件数据库的物理存储文件,而不是逻辑数据表示形式[^1]。 ### 三级标题:导入 `.frm`、`.MYD`、`.MYI` 文件的可行方法 如果希望将这些物理文件中的数据导入MySQL 数据库中,可以采用以下方法: 1. **手动复制文件并重建数据库结构** 找到当前 MySQL 的数据目录(通常在 `my.ini` 文件中配置的 `datadir` 路径下),将 `.frm`、`.MYD`、`.MYI` 文件复制到对应数据库的目录中,然后重启 MySQL 服务,使数据库识别这些文件[^2]。 2. **使用 MySQL 命令行工具恢复数据** 在数据库服务启动后,可以尝试使用 `REPAIR TABLE` 或 `CHECK TABLE` 命令修复表结构,并通过 `SELECT` 语句导出数据为 `.sql` 文件,再使用 Navicat 导入该 `.sql 文件进行数据迁移[^3]。 3. **通过 MySQL Workbench 或其他工具辅助** 如果 Navicat 不支持直接导入这些文件,可以考虑使用 MySQL 自带的工具如 `mysqlfrm` 来读取 `.frm` 文件内容,重建表结构,并将数据导入数据库,生成 `.sql` 文件后,再使用 Navicat 导入该 `.sql` 文件。 ### 三级标题:示例操作(使用 `mysqlfrm`) ```bash mysqlfrm --server=root:password@localhost:3306 /path/to/your/table.frm --port=3307 ``` 上述命令将尝试从 `.frm` 文件中恢复表结构,并通过模拟的 MySQL 服务器端口(3307)提供该结构信息。然后可以将其保存为 `.sql` 脚本,并在 Navicat 中导入该脚本以重建表结构。 ### 三级标题:注意事项 - 在操作前务必备份所有 `.frm`、`.MYD`、`.MYI` 文件,避免数据丢失。 - 确保 MySQL 服务在操作前后正确启动和关闭,防止文件损坏。 - 如果使用的是 InnoDB 存储引擎,直接复制这些文件可能无法成功,因为 InnoDB 表的结构和数据管理方式不同。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值