84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我正在尝试恢复 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
文件导入数据并将恢复数据。