mysql根据.frm和.ibd恢复数据

由于表空间问题未研究,次操作需在本服务器上进行

表结构恢复(.frm)

1.创建表,和要恢复的表同名(我这里使用user)

2.关闭mysql,将要恢复的user.frm覆盖新创建的,

mysql配置文件添加innodb_force_recovery = 6,启动mysql,

查看表结构desc user;然后报错Table ‘test.user’ doesn’t exist(找不到数据表,先不用管它)

3.查看mysql文件目录下的.err文件找到

[Warning] InnoDB: Table test/user contains 1 user defined columns in InnoDB, but 8 columns in MySQL,

这里就是告诉我们之前的表有8个字段

mysql配置文件把该配置屏蔽#innodb_force_recovery = 6

删除掉刚创建的表 drop table user;,创建一个8字段的表,字段类型随意

CREATE TABLE user (

id int , id1 int ,id2 int , id3 int , id4 int , id5 int , id6 int , id7 int )ENGINE=InnoDB;

创建完成后 关闭mysql

然后将要恢复的user.frm覆盖掉现在的frm,mysql配置文件打开innodb_force_recovery = 6

启动mysql,查看一下user表的结构desc user;,可以看到字段恢复了。

4.

show create table user; 获取到创建user表的语句,保存起来一会要用

屏蔽掉配置文件中的#innodb_force_recovery = 6

重启mysql,删除掉user表,drop table user;

利用show create table获取到的sql重新创建一下user表,为了避免遇到Error Code: 1808. Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)

则在建表语句后加上 ROW_FORMAT=COMPACT

表数据恢复(.ibd)

1.接触文件绑定

alter table user discard tablespace;(执行完sql后,表现为表的ibd文件被删除,但是千万不要自己手动删除 )

2.修改文件权限为mysql权限

chown -R mysql:mysql user.ibd(这里是 文件操作不要在mysql命令里执行了^-^)

3.绑定数据表.frm和数据.idb的关系。

alter table user import tablespace;

4.数据恢复完成

文章参考

https://blog.csdn.net/hzw19920329/article/details/78045864

https://blog.csdn.net/u012887385/article/details/54406712

你可能感兴趣的:(mysql根据.frm和.ibd恢复数据)