当前位置: 首页 > 面试题库 >

从frm和ibd文件还原表结构

颜杰
2023-03-14
问题内容

我正在尝试在PMA中还原数据库,但只能访问frm和ibd文件,而不能访问我了解您需要的ib_log文件。

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


问题答案:

我仅从.frm.idb文件中还原了该表。

获取SQL查询以创建表

如果您已经知道表的架构,则可以跳过此步骤。

  1. 首先,安装MySQL Utilities。然后,您可以mysqlfrm在命令提示符(cmd)中使用命令。

  2. 其次,.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文件放入新文件夹,例如:

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

确保.ibd文件可以被myhtml" target="_blank">sql用户读取,例如,通过chown -R mysql:mysql *.ibd在文件夹中运行。

运行此查询以导入旧数据:

ALTER TABLE example_table IMPORT TABLESPACE;

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



 类似资料:
  • 哎,某些原因,数据库只剩.frm和.ibd文件了,有人会恢复吗?mysqlUtilities不行? 下面是数据库的.frm和.idb文件 https://www.chunten.com/angpu/download.rar

  • 在做文件上传时选择文件夹,获取到 files 列表。但是不存在文件夹的目录层级。怎么样通过file的webkitRelativePath来遍历还原出文件夹结构。例如: 获取到的files变成数组后是: 变成以后的结构: 非常感谢,已经卡在这里好久了,哪位大佬帮忙解决一下!

  • 我有一个golang结构,其中包含对其他结构的引用。有没有一种自动化的方法来生成。结构中的原始文件? 例如: 应生成:

  • 问题内容: 是否可以从物理数据库文件还原MySQL数据库。我的目录具有以下文件类型: client.frm client.MYD client.MYI 但要多出约20张桌子 我通常使用mysqldump或类似的工具在1个SQL文件中获取所有内容,那么如何处理这些类型的文件呢? 问题答案: MySQL MyISAM表是三个文件的组合: FRM文件是表定义。 MYD文件是存储实际数据的位置。 MYI文

  • 问题内容: 我在玩Go,但是在做一些测试时发现了这种奇怪的情况。 我在结构中使用method来将变量发送到另一个应该更改字段的方法,但是当我在最后检查它时,该字段又回到了第一个值,这让我感到困惑。 这是我正在测试的方法,它调用连接器的sendCommand。 我正在使用的模拟对象中的哪个仅仅是更改此struct字段的值。 但是,当我检查它时,它又回到了内部。我设置了一些打印件以尝试d跟踪值,然后它

  • 问题内容: 我有我的mysql数据库的mysqldump备份,该数据库由我们的所有表组成,大约440兆。我想从mysqldump恢复仅其中一张表的内容。这可能吗?从理论上讲,我可以剪掉重建所需表的部分,但我什至不知道如何有效地编辑该大小的文本文档。 问题答案: 您可以尝试使用sed以便仅提取所需的表。 假设表的名称为,文件mysql.dump是包含您的大型转储的文件: 这将在文件中复制位于与下一个