文件修复

如何从。frm和。ibd文件恢复数据

简介:在某些情况下(如MySQL服务器崩溃、硬件故障或其他)导致数据库损坏和数据丢失,您可以从. frm和. ibd文件恢复数据。它还建议使用专门的MySQL修复工具从损坏的数据文件中恢复数据库和所有数据。


Windows版免费下载
Windows版免费下载
目录

从。frm和。ibd文件恢复数据的步骤
  • 创建MySQL数据库并重新创建表
  • 查找表模式
  • 重新创建数据库表
  • 删除新建的。ibd文件
  • 复制旧的。ibd文件
  • 导入表空间
  • 从.FRM和.IBD文件恢复数据的更好选择

    使用InnoDB存储引擎时,MySQL Server使用. frm文件存储表模式,使用. ibd文件存储MySQL数据库的数据和索引。在意外删除数据或MySQL数据库损坏的情况下,您可以从. frm和. ibd文件恢复数据。

    如果您有模式的备份,您可以使用在线可用的实用程序从. frm文件中提取模式。

    从.FRM和.IBD文件恢复数据的步骤

    步骤1 -创建MySQL数据库并重新创建表

    注意:这里我们将使用phpMyAdmin来创建MySQL数据库。

    • 登录phpMyAdmin。
    • 输入数据库名称(用于实例雇员)并单击Create。这将创建一个名为employee的数据库。

    phpMyAdmin面板

    • 导航到MySQL数据库所在的路径,可以看到新添加的数据库。但是,数据库不会有任何. frm和. ibd文件。在我们的例子中,数据库可以在C:\xampp\mysql\data中找到,但路径可能会根据您用于访问mysql数据库的web工具而有所不同。

    mysql-database-path

    • 打开' employee '数据库,您可以看到其中没有表。

    mysql表

    步骤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文件,而无需修改表模式。在保存数据之前,您可以下载演示版本进行验证。

    Windows版免费下载


    常见问题解答

    Q.当我试图删除。ibd文件时,我得到一个错误“此操作无法完成,因为该文件在…中打开”。请帮我修一下。

    答:如果您试图删除的. ibd文件已经在使用中,则会出现这样的错误。要修复此错误,请关闭MySQL服务,删除该文件,然后重新启动MySQL服务。

    问:我用mysqlfrm工具恢复了一个表的CREATE TABLE语句。我可以通过执行CREATE语句重新创建表结构,删除. ibd文件,并复制旧的. ibd文件。但是,当试图导入表空间时,表模式不匹配。我该怎么做才能解决这个问题?

    A.在CREATE TABLE查询的末尾添加“ROW_FORMAT=compact”来解决问题。

    76% 的人认为这篇文章有帮助