我正在尝试在PMA中恢复数据库但只能访问frm和ibd文件 - 而不是我理解你需要的ib_log文件。
我知道我可能无法恢复数据库数据,但是可以从frm文件中恢复表的结构吗?
答案 0 :(得分:20)
我仅从.frm
和.idb
文件中恢复了该表。
首先,我在笔记本电脑上安装了MySQL Utilities。
然后,您可以在命令提示符(cmd)中使用mysqlfrm
命令。
其次,我在cmd中使用.frm
命令从mysqlfrm
文件中获取了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
文件放在新文件夹中。
我运行此查询以导入旧数据。<强>
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查询:
上载每个.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