从frm和ibd文件恢复表结构

时间:2014-11-11 15:56:16

标签: mysql sql phpmyadmin innodb

我正在尝试在PMA中恢复数据库但只能访问frm和ibd文件 - 而不是我理解你需要的ib_log文件。

我知道我可能无法恢复数据库数据,但是可以从frm文件中恢复表的结构吗?

5 个答案:

答案 0 :(得分:20)

我仅从.frm.idb文件中恢复了该表。

  1. 首先,我在笔记本电脑上安装了MySQL Utilities。 然后,您可以在命令提示符(cmd)中使用mysqlfrm命令。

  2. 其次,我在cmd中使用.frm命令从mysqlfrm文件中获取了sql查询。

  3.   

    <强> mysqlfrm --diagnostic <path>/example_table.frm

    然后你可以获得sql查询来创建相同的结构化表。 像这样:

      

    CREATE TABLE `example_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(150) NOT NULL, `photo_url` varchar(150) NOT NULL, `password` varchar(600) NOT NULL, `active` smallint(6) NOT NULL, `plan` int(11) NOT NULL, PRIMARY KEY `PRIMARY` (`id`) ) ENGINE=InnoDB;

    我使用上面的sql查询创建了表。

    1. 第三,我运行此查询以删除新的表格数据。
    2.   

      <强> ALTER TABLE example_table DISCARD TABLESPACE;

      这删除了新.frm文件和.idb文件之间的连接。 还删除了文件夹中的.idb文件。

      1. 第四,我将旧的.idb文件放在新文件夹中。 我运行此查询以导入旧数据。
      2.   

        <强> ALTER TABLE example_table IMPORT TABLESPACE;

        这是从.idb文件导入的数据,最后,我恢复了旧数据表。 我相信这会对你有帮助。

        谢谢。

答案 1 :(得分:4)

InnoDB需要ib_log文件进行数据恢复,但它还需要包含数据字典的ibdata1文件,有时还包含表的待处理数据。

数据字典是一种重复的系统,它记录表结构,并将表id与包含表数据的物理.ibd文件相匹配。

您不能只在没有InnoDB数据字典的情况下移动.ibd文件,并且数据字典必须与.ibd文件中找到的表ID匹配。您可以重新附加.ibd文件并恢复数据,但该过程不适合胆小的人。见http://www.chriscalender.com/recovering-an-innodb-table-from-only-an-ibd-file/

您可以使用带有一些文件技巧的.frm文件来恢复结构,但是您最初无法将它们创建为InnoDB表。这是一个博客,其中介绍了将.frm文件恢复为MyISAM表的方法: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/

您将无法使用PMA。您需要超级用户访问服务器上的数据目录。

答案 2 :(得分:1)

您可以从.frm文件和ibd文件中的数据恢复表结构。

使用属于MySQL Utilities

的mysqlfrm工具

shell> mysqlfrm --diagnostic myfile.frm

使用表结构在同名数据库中重新创建表。

mysql> CREATE mytable (int i);

丢弃新创建的表的表空间。

mysql> ALTER TABLE mytable DISCARD TABLESPACE;

将备份目录中的孤立.idb文件复制到新数据库目录。确保.ibd文件具有必要的文件权限。

导入孤立的.ibd文件。发出警告,指示InnoDB将尝试导入文件而不进行架构验证。

mysql> ALTER TABLE r IMPORT TABLESPACE;SHOW WARNINGS;

答案 3 :(得分:1)

只要您知道该怎么做,这实际上就很容易,并且不需要任何外部软件或Shell命令。

默认情况下,数据库数据存储在C:\ xampp \ mysql \ data \或类似文件中。文件夹是数据库表。在每个文件夹中,.frm文件是各列。 .ibd保存行值。

首先在PHPMyAdmin中创建数据库。

在菜单“恢复结构”下>从.frm文件中获取从该站点生成的SQL查询:

https://recovery.twindb.com/

上载每个.frm文件,然后将这些查询复制并粘贴到SQL命令中,以在PHPMyAdmin中创建表。

然后,在每个表上执行以下SQL查询:

ALTER TABLE table_name DISCARD TABLESPACE

这将自动从数据库目录中删除新的.ibd文件。 将旧的.ibd文件复制到数据库文件夹中。 运行以下命令以再次激活该表:

ALTER TABLE table_name IMPORT TABLESPACE

就是这样!您应该能够再次查看和访问所有旧值。

答案 4 :(得分:0)

您也可以尝试使用mysql实用程序。

从book.frm文件到book.sql文件:

mysqlfrm --server=root:mysqladmin@localhost:3306 D:\yahwehdb\yahweh_altera\book.frm > D:\yahwehdb\yahweh_altera\book.frm\book.sql --diagnostic --port=3307 --user=root

从包含所有.frm文件的目录到文件all.sql:

mysqlfrm --server=root:mysqladmin@localhost:3306 D:\yahwehdb\yahweh_altera > D:\yahwehdb\yahweh_altera\all.sql --diagnostic --port=3307 --user=root