误删数据文件.ibd,.frm文件,导致无法创建表,记录一次恢复数据表操作

一、背景

环境版本:
MySQL版本 5.7.7 pod级mysql主从,误删除存储引擎为innodb的数据文件导致表消失,同名表无法创建,但是表空间存在该名称表;

1.1 mysql启动报错;

1.2 创建表报错;

create table tablename;
报错:
ERROR:Tablespace tablename exists.

1.3 查看表结构报错;

desc tablename;
报错:
ERROR:Table tablename  doesnt exists

  

二、解决方法:

2.1 修改数据库my.cnf配置;

修改my.cnf配置,并保存
innodb_force_recovery=2  防止数据写入,更新,删除操作
重启数据库后,重新创建表

2.2 备份数据库;

未删除数据库之前的数据表

备份数据库所有表或者只备份表结构,这里笔者只备份表结构
mysqldump -uroot -pxxx  -d dbname >dbname.sql

2.3 删除数据库;

drop database dbname;
报错:
Error dropping database (can not rmdir './dbname',errno: 39)

解决方法:

在数据库的物理目录中(mysql的data目录),进入XXXXX数据库目录,查看是否有文件存在,若存在,则清除

cd dbname;
rm -rf tablename 或者 mv tablename /home/tmp/
然后再删除数据库
> drop database dbname;

Query ok,

2.4 重新导入表;

mysql -uroot -pxxxx dbname <dbname.sql

2.5 创建表结构;

create table tablename;
报错:
Got error 168 from storage engine;

解决方法:

查看日志报错:

修改my.cnf配置,并保存
innodb_force_recovery=0
重启数据库后,重新创建表

三、检查是否恢复

检查数据库表文件是否创建;

 

原文地址:https://www.cnblogs.com/supery007/p/15151400.html