目录表 从。frm和。ibd文件中恢复数据的步骤 |
使用InnoDB存储引擎时,MySQL Server使用。frm文件存储表模式,使用。ibd文件存储MySQL数据库的数据和索引。在意外删除数据或MySQL数据库损坏的情况下,可以从. frm和. ibd文件恢复数据。
如果您有一个模式备份,您可以使用在线可用的实用程序从. frm文件中提取模式。
从。frm和。ibd文件恢复数据的步骤
步骤1 -创建MySQL数据库并重新创建表
注意:这里我们将使用phpMyAdmin来创建MySQL数据库。
- 登录到phpMyAdmin。
- 输入数据库名称(例如employee)并单击Create。这将创建一个名为employee的数据库。
- 导航到MySQL数据库所在的路径,您可以看到新添加的数据库。但是,数据库将没有任何. frm和. ibd文件。在我们的例子中,数据库可以在C:\xampp\mysql\data中找到,但路径可能会根据您用来访问mysql数据库的web工具而有所不同。
- 打开' employee '数据库,您可以看到其中没有表。
步骤2 -查找表模式
注意:如果表模式可用,则跳到下一步。
如果你没有表格模式,下载MySQL公用事业。由Oracle发布的MySQL实用程序包含一组脚本,可以轻松地执行一些常见的DBA任务。Mysqlfrm是实用程序中的工具之一,您可以使用它来恢复表结构。
下载工具后,执行如下命令查找数据库模式。
mysql。——诊断路径文件名 |
这个命令一个字节一个字节地从.frm文件中读取所有信息,而不需要MySQL实例。
注意:虽然此方法对于从损坏的. frm文件中检索数据很有用,但它可能无法恢复所有数据。要恢复排序规则或字符集,您需要运行以下命令从.FRM文件中恢复信息:
Mysqlfrm——server=root@127.0.0.1——port 3307 ./filename.frm |
步骤3 -重新创建数据库表
在新创建的数据库(在本例中为employee)中,使用步骤2中生成的脚本创建一个新表。执行该脚本将在数据库数据文件夹中创建一个新的. frm和. ibd文件。
步骤4 -删除新的。ibd文件
删除“。ibd”文件。
删除表空间 |
该命令断开MySQL和表空间之间的链接,以删除. ibd文件。
步骤5 -复制旧的。ibd文件
现在,将原始的. ibd文件复制到新数据库中。
步骤6—导入表空间
通过执行以下命令恢复MySQL表和表空间之间的链接:
导入表空间 |
这些步骤将帮助您从. frm和. ibd文件中恢复数据。但是,它也有一定的缺点:
- 您需要手动执行每个表的所有步骤来恢复MySQL数据库;这可能会花费很多时间。
- 使用mysqlfrom提取CREATE TABLE定义可能导致模式不匹配。
- mysqlfromm无法检索AI数字序列和FK约束。
从。frm和。ibd文件恢复数据的更好选择
使用专业的MySQL修复工具,如Stellar repair for MySQL,提供了一个更容易的选择,以最小的停机时间恢复数据库和所有数据。此外,该软件可以在不修改表模式的情况下恢复数据。frm和。ibd文件。您可以通过下载软件的演示版本来验证保存前的数据。

常见问题解答
Q.当试图删除。ibd文件时,我得到一个错误“此操作无法完成,因为文件在…”请帮我修一下。
A.如果你试图删除的. ibd文件已经在使用,你会得到这样的错误。要修复该错误,请关闭MySQL服务,删除该文件,然后重新启动MySQL服务。
问:我用mysqlfrom工具恢复了一个表的CREATE TABLE语句。通过执行CREATE语句,我能够重新创建表结构,删除. ibd文件,并复制旧的. ibd文件。但是,当尝试导入表空间时,表模式不匹配。我能做什么来解决这个问题?
A.在CREATE TABLE查询的末尾添加“ROW_FORMAT=compact”来解决这个问题。