前提:
有数据被删表的.ibd文件,可以从数据库的备份文件中解压出来。然后我虚拟机上的mysql是5.6版本,看了下自己本地电脑上mysql5.5的data里貌似没有.ibd文件
步骤:
1、进入Linux虚拟机,使用service mysql stop停止mysql服务,在mysql的my.cnf下添加innodb_force_recovery=1 ,启动mysql服务
[root@localhost ~]# service mysql stop --停止mysql
[root@localhost mysql]# cd /usr/local/mysql --进入mysql目录
[root@localhost mysql]# vim my.cnf --编辑my.cnf文件
在[mysqld]下添加如下两行
innodb_force_recovery=1 #可以设置1-6
innodb_purge_thread=0 #如果上边的配置值大于1,此处就要设置为0, 否则就会出
# 现InnoDB: Waiting for the background threads to start的错误.
2、service mysql start启动数据库,使用数据库连接工具(我用的navcat数据库工具)在虚拟机上新建一个同名同编码格式的数据库,将需恢复的表的结构生成 .sql文件,在虚拟机的同名数据库中运行,就有了和原来同结构的表了。(表结构必须相同)
3、将原先的.ibd文件与原先的.frm文件解除绑定
alter table XXX(需要恢复数据的表名) discard tab