一尘不染

从frm和ibd文件还原表结构

mysql

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

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


阅读 477

收藏
2020-05-17

共1个答案

一尘不染

我仅从.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文件可以被mysql用户读取,例如,通过chown -R mysql:mysql *.ibd在文件夹中运行。

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

ALTER TABLE example_table IMPORT TABLESPACE;

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

2020-05-17