Mysql 从frm和ibd文件还原表结构
我正在尝试恢复PMA中的数据库,但只能访问frm和ibd文件,而不能访问我了解您需要的IBU日志文件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文件
我知道我可能无法恢复数据库数据,但是否可以从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