声明:真是一个繁琐的过程!
在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;
然后就发现数据都恢复了!!!