由于表空间问题未研究,次操作需在本服务器上进行
表结构恢复(.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.数据恢复完成