Mysql使用ibd和frm恢复表

声明:真是一个繁琐的过程!

在mysql命令下选择以存在的数据名(如yhj)

use yhj

创建一个数据库表(需要和你想恢复的表同名,如user)

create table user(id int);

然后退回到命令行界面关闭mysql服务

net stop mysql

用已有的frm文件覆盖掉mysql文件里data目录下yhj里的frm文件

接着对配置文件(mysql根目录下)my.ini设置innodb_force_recovery = 6

然后重启服务器

net start mysql

进入mysql命令界面 进入库yhj
使用以下语句查看表的结构

desc user

会报错(不要慌,正常情况)
去mysql目录下data文件里的后缀为err的文件(一般会隐藏,在查看里显示隐藏的文件就有了)里查看最下面附近(越往下的信息越新)

在这里插入图片描述
提示这个表有17个参数 而我们刚刚只创建了一个 所以无法查看结构
(这个例子也太坑了 要加17个参数,,,哭了)

所以删掉刚刚的表 重新建一个 带17个参数的表就行了。
具体步骤: 先退回命令行界面停止服务器。把my.ini里刚刚加的那一行注释掉(在前面加上#即可,不用删 以后用得到),然后重启服务器,进入数据库,进入库yhj,删掉表格user

drop table user;

重建17个参数的表格

create table user(id1 int,id2 int,id3 int,id4 int,id5 int,id6 int,id7 int,id8 int,id9 int,id10 int,id11 int,id12 int,id13 int,id14 int,id15 int,id16 int,id17 int);

然后重复之前的操作(将frm复制到新建的库下,desc user 查看结构 别忘记过程中需要反复关闭打开服务器和修改my.ini

这次就可以成功查看结构了
在这里插入图片描述
然后打开navicat刷新后会出现你新建的这个表

右键表明 选对象信息 会出现详细信息 选择dll即可查看原始建表语句
重复之前删表建表的操作 不过把建表语句替换为dll中查到的语句

这里可能会报错
如果报错 ALTER TABLE tbl import TABLESPACE Error Code: 1808. Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)
则在建表语句后加上 ROW_FORMAT=COMPACT

还没有完!!!!

建好表还要把数据匹配好!

所以先解除自动生成的ibd和frm的关系
命令:alter table user discard tablespace;

然后又是繁琐的停服务器 把已有的ibd复制到yhj目录下
重启服务器 进入mysql 选择库yhj 然后重新绑定ibd和frm的关系

命令:alter table user import tablespace;

然后就发现数据都恢复了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值