Mysql 从frm和ibd文件还原表结构

Mysql 从frm和ibd文件还原表结构,mysql,sql,phpmyadmin,innodb,Mysql,Sql,Phpmyadmin,Innodb,我正在尝试恢复PMA中的数据库,但只能访问frm和ibd文件,而不能访问我了解您需要的IBU日志文件 我知道我可能无法恢复数据库数据,但是否可以从frm文件恢复表的结构?InnoDB需要ib_日志文件进行数据恢复,但它还需要ibdata1文件,其中包含数据字典,有时还包含表的挂起数据 数据字典是一种复制系统,它记录表结构,并将表id与包含表数据的物理.ibd文件相匹配 在没有InnoDB数据字典的情况下,不能只移动.ibd文件,数据字典必须与.ibd文件中的表id匹配。您可以重新附加.ibd文件

我正在尝试恢复PMA中的数据库,但只能访问frm和ibd文件,而不能访问我了解您需要的IBU日志文件


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

InnoDB需要ib_日志文件进行数据恢复,但它还需要ibdata1文件,其中包含数据字典,有时还包含表的挂起数据

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

在没有InnoDB数据字典的情况下,不能只移动.ibd文件,数据字典必须与.ibd文件中的表id匹配。您可以重新附加.ibd文件并恢复数据,但此过程不适用于心脏虚弱的患者。看

您可以通过一些文件技巧使用.frm文件来恢复该结构,但首先无法将它们创建为InnoDB表。下面是一个博客,介绍了将.frm文件恢复为MyISAM表的方法:


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

您可以从.frm文件恢复表结构,从ibd文件恢复数据

使用mysqlfrm工具,它是

shell>mysqlfrm-diagnostic myfile.frm

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

mysql>创建mytable int i

放弃新创建表的表空间

mysql>altertablemytable放弃表空间

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

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


mysql>altertablerr导入表空间;显示警告

我仅从.frm和.idb文件还原了表

获取SQL查询以创建表 如果您已经知道表的架构,则可以跳过此步骤

首先,安装。 然后可以在命令提示符cmd中使用mysqlfrm命令

其次,使用mysqlfrm命令从.frm文件获取SQL查询:

创建表 使用上述SQL查询创建表

如果旧数据仍然存在,则可能必须先删除相应的数据库和表。确保您有数据文件的备份

恢复数据 运行此查询以删除新表数据:

ALTER TABLE example_table DISCARD TABLESPACE;
这将删除新的.frm文件和新的空.idb文件之间的连接。另外,删除文件夹中的.idb文件

然后,将旧的.idb文件放入新文件夹,例如:

cp backup/example_table.ibd <path>/example_table.idb

这将从.idb文件导入数据,并将恢复数据。

只要您知道如何操作,而且不需要外部软件或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

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

您也可以尝试使用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
从包含all.frm文件的目录到文件all.sql:

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

我想支持Peter从.frm文件恢复结构的方法。只需确保MySQL版本低于5.6即可。5.6将投诉假表中的列数少于frm文件中的列数。我尝试了此操作,但在运行导入查询1812时出现以下错误-表wallipop.categories缺少表空间。我通过更改文件的所有权修复了此问题,但现在得到的是1808-架构不匹配表具有行\类型\动态行格式,.ibd文件具有ROW_TYPE_COMPACT ROW格式。对于其他任何遇到ROW_TYPE_动态问题的人,就像我刚才所做的一样。您必须从头开始这个过程,并在create table语句中,在ENGINE=InnoDB之后添加ROW\U FORMAT=COMPACT,例如,它看起来像ENGINE=InnoDB ROW\U FORMAT=COMPACT DEFAULT CHARSET=utf8 COLLATE=utf8\U unicode\U ci。然后像正常一样重复这些步骤,它应该会工作。嘿,请指导我如何在windows上执行权限/所有权步骤?确保mysql用户可以读取.ibd文件,例如通过runnin读取
g chown-R mysql:mysql*.ibd在文件夹中。如果你有大量的.frm文件?网站不能打开为什么?
ALTER TABLE table_name IMPORT TABLESPACE
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
mysqlfrm --server=root:mysqladmin@localhost:3306 D:\yahwehdb\yahweh_altera > D:\yahwehdb\yahweh_altera\all.sql --diagnostic --port=3307 --user=root