共计 1035 个字符,预计需要花费 3 分钟才能阅读完成。
说明
mysql InnoDB 引擎需要通过 .frm 和.ibd 文件恢复。
一、恢复表结构
1、创建和原来一样的数据库
CREATE DATABASE [IF NOT EXISTS] test-base
2、创建需要恢复的表 (表名需要和恢复的一致)
分两种情况:
1)知道表结构:CREATE TABLE test-table ()
2)不知道表结构:CREATE TABLE test-table (id int)
随便先创建一个
3、停止 mysql
4、覆盖 frm 文件
用原来的 test-table.frm 覆盖新创建的
5、配置my.ini文件
mysqld下 配置 innodb_force_recovery = 6
6、重启 mysql
7、确定表字段个数 (如果知道表字段个数,desc test-table 将正常输出)
1)、查看表结构 desc test-table
看见报错。
2)、查看 data 的 err 结尾文件,看见报错 [Warning] InnoDB: Table wangyi/songlyric contains 1 user defined columns in InnoDB, but 6 columns in MySQL.
3)、根据提示从第2步开始新建 create table test-table(id int,id1 int,id2 int,id3 int,id4 int,id5 int);
8、获取 test-table 的创建语句,重新创建表
1)注释 mysqld下 innodb_force_recovery = 6
2)删除表 drop table test-table
3)执行创建表语句新建表
可以看到和之前通过navicat查看得到的创建表的sql语句相比,末尾多了ROW_FORMAT=COMPACT;
二、恢复表数据
1、.ibd与.frm文件解除绑定
恢复表数据需要首先将原先的.ibd文件与原先的.frm文件解除绑定,具体就是在控制台执行下面命令:
alter table test-table discard tablespace;
2、停止 mysql
3、覆盖 ibd 文件
4、重启 mysql
5、.ibd与.frm文件恢复联系
alter table test-table import tablespace;
整个恢复过程其实可以总结为下面几步:
(1) 恢复表结构
(2) 复制出来创建表的 sql 语句
(3) 恢复表数据(在恢复表数据的时候,首先需要解除当前创建的表与默认生成的.ibd文件间的关系,接着将要恢复数据表的.ibd文件与当前创建的表联系起来即可)
提醒:本文发布于625天前,文中所关联的信息可能已发生改变,请知悉!