从 .frm 和 .idb 还原 MySQL 表数据以及表结构

一、只还原表数据

前提,被还原的表结构与之前的表结构一致。举例子:需要被还原的表:example

  1. ALTER TABLE example DISCARD TABLESPACE; # 脱离保存表 example 空间数据
  2. 将已备份好的 example.ibd 覆盖到当前数据目录
  3. ALTER TABLE example IMPORT TABLESPACE; # 重新导入表 example 空间数据

二、InnoDB 整体还原表数据以及表结构

.frm: 保留表数据结构;.ibd: 保留表数据;
具体情况分以下两种:根据不同MySQL版本 innodb_file_per_table 配置有关。
MySQL <= 5.5.6 默认开启 innodb_file_per_table;MySQL >= 5.5.7 默认关闭 innodb_file_per_table。

  1. 之前服务:innodb_file_per_table=1

    用已备份的 .frm 和 .ibd 文件覆盖需要被还原的表,同时还需要覆盖 ibdata1, ib_logfile0, ib_logfile1 对应文件

  2. 之前服务: innodb_file_per_table=0

    仅需要用已备份的 .frm 和 .ibd 文件覆盖需要被还原的表

三、参考资料

  1. Import .frm and .opt files to MySQL
  2. MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
评论