我正在尝试恢复 PMA 中的数据库,但只能访问 frm 和 ibd 文件 - 而不能访问我了解您需要的 ib_log 文件。
我知道我可能无法恢复数据库数据,但是是否可以从 frm 文件恢复表的结构?
InnoDB 需要 ib_log 文件来进行数据恢复,但它也需要 ibdata1 文件,其中包含数据字典,有时还包含表的待处理数据。
数据字典是一种记录表结构的重复系统,并将表 ID 与包含表数据的物理 .ibd 文件相匹配。
您不能在没有 InnoDB 数据字典的情况下移动 .ibd 文件,并且数据字典必须与 .ibd 文件中找到的表 ID 匹配。您可以重新附加.ibd 文件并恢复数据,但该过程不适合胆小的人。请参阅 http://www.chriscalender.com /仅从 ibd 文件中恢复 innodb 表/
您可以使用 .frm 文件通过一些文件技巧来恢复结构,但您首先无法将它们创建为 InnoDB 表。这是一个博客,介绍了将 .frm 文件恢复为 MyISAM 表的方法: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/
您将无法为此使用 PMA。您需要超级用户访问服务器上的数据目录。
我仅从 .frm 和 .idb 文件恢复了表。
.frm
.idb
如果您已经知道表的架构,则可以跳过此步骤。
首先,安装MySQL 实用程序。 然后您可以在命令提示符(cmd)中使用mysqlfrm命令。
mysqlfrm
其次,使用 mysqlfrm 命令从 .frm 文件获取 SQL 查询:
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 查询创建表。
如果旧数据仍然存在,您可能需要先删除相应的数据库和表。确保您有数据文件的备份。
运行此查询以删除新表数据:
ALTER TABLE example_table DISCARD TABLESPACE;
这将删除新的 .frm 文件和(新的、空的).idb 文件之间的连接。另外,删除文件夹中的 .idb 文件。
然后,将旧的.idb文件放入新文件夹中,例如:
cp backup/example_table.ibd <path>/example_table.idb
确保 .ibd 文件可以被 mysql 用户读取,例如通过在文件夹中运行 chown -R mysql:mysql *.ibd 。
.ibd
mysql
运行此查询以导入旧数据:
ALTER TABLE example_table IMPORT TABLESPACE;
这将从 .idb 文件导入数据并将恢复数据。
InnoDB 需要 ib_log 文件来进行数据恢复,但它也需要 ibdata1 文件,其中包含数据字典,有时还包含表的待处理数据。
数据字典是一种记录表结构的重复系统,并将表 ID 与包含表数据的物理 .ibd 文件相匹配。
您不能在没有 InnoDB 数据字典的情况下移动 .ibd 文件,并且数据字典必须与 .ibd 文件中找到的表 ID 匹配。您可以重新附加.ibd 文件并恢复数据,但该过程不适合胆小的人。请参阅 http://www.chriscalender.com /仅从 ibd 文件中恢复 innodb 表/
您可以使用 .frm 文件通过一些文件技巧来恢复结构,但您首先无法将它们创建为 InnoDB 表。这是一个博客,介绍了将 .frm 文件恢复为 MyISAM 表的方法: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/
您将无法为此使用 PMA。您需要超级用户访问服务器上的数据目录。
我仅从
.frm
和.idb
文件恢复了表。获取用于创建表的 SQL 查询
如果您已经知道表的架构,则可以跳过此步骤。
首先,安装MySQL 实用程序。 然后您可以在命令提示符(cmd)中使用
mysqlfrm
命令。其次,使用
mysqlfrm
命令从.frm
文件获取 SQL 查询:然后您可以获取 SQL 查询来创建相同的结构化表。 像这样:
创建表
使用上述 SQL 查询创建表。
如果旧数据仍然存在,您可能需要先删除相应的数据库和表。确保您有数据文件的备份。
恢复数据
运行此查询以删除新表数据:
这将删除新的
.frm
文件和(新的、空的).idb
文件之间的连接。另外,删除文件夹中的.idb
文件。然后,将旧的
.idb
文件放入新文件夹中,例如:确保
.ibd
文件可以被mysql
用户读取,例如通过在文件夹中运行 chown -R mysql:mysql *.ibd 。运行此查询以导入旧数据:
这将从
.idb
文件导入数据并将恢复数据。