误删数据文件.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 重启数据库后,重新创建表
三、检查是否恢复
检查数据库表文件是否创建;