目录 从。frm和。ibd文件恢复数据的步骤 |
使用InnoDB存储引擎时,MySQL Server使用. frm文件存储表模式,使用. ibd文件存储MySQL数据库的数据和索引。在意外删除数据或MySQL数据库损坏的情况下,您可以从. frm和. ibd文件恢复数据。
如果您有模式的备份,您可以使用在线可用的实用程序从. frm文件中提取模式。
从.FRM和.IBD文件恢复数据的步骤
步骤1 -创建MySQL数据库并重新创建表
注意:这里我们将使用phpMyAdmin来创建MySQL数据库。
- 登录phpMyAdmin。
- 输入数据库名称(用于实例雇员)并单击Create。这将创建一个名为employee的数据库。
- 导航到MySQL数据库所在的路径,可以看到新添加的数据库。但是,数据库不会有任何. frm和. ibd文件。在我们的例子中,数据库可以在C:\xampp\mysql\data中找到,但路径可能会根据您用于访问mysql数据库的web工具而有所不同。
- 打开' employee '数据库,您可以看到其中没有表。
步骤2 -查找表架构
注意:如果表模式可用,则跳到下一步。
如果你没有表模式,下载MySQL公用事业。由Oracle发布的MySQL Utilities包含一组脚本,可以轻松地执行一些常见的DBA任务。Mysqlfrm是实用工具中的一个工具,你可以使用它来恢复表结构。
下载工具后,执行以下命令查找数据库模式。
mysql。FRM——诊断路径filename.frm路径 |
这个命令一个字节一个字节地从.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数据库;这可能会花很多时间。
- 使用mysqlfrm提取CREATE TABLE定义可能导致模式不匹配。
- Mysqlfrm无法检索AI数字序列和FK约束。
从.FRM和.IBD文件恢复数据的更好选择
使用专门的MySQL修复工具,如Stellar repair for MySQL,提供了一个更简单的替代方案来恢复您的数据库及其所有数据,停机时间最小。此外,该软件可以恢复数据。frm和。ibd文件,而无需修改表模式。在保存数据之前,您可以下载演示版本进行验证。
常见问题解答
Q.当我试图删除。ibd文件时,我得到一个错误“此操作无法完成,因为该文件在…中打开”。请帮我修一下。
答:如果您试图删除的. ibd文件已经在使用中,则会出现这样的错误。要修复此错误,请关闭MySQL服务,删除该文件,然后重新启动MySQL服务。
问:我用mysqlfrm工具恢复了一个表的CREATE TABLE语句。我可以通过执行CREATE语句重新创建表结构,删除. ibd文件,并复制旧的. ibd文件。但是,当试图导入表空间时,表模式不匹配。我该怎么做才能解决这个问题?
A.在CREATE TABLE查询的末尾添加“ROW_FORMAT=compact”来解决问题。