误删数据⽂件.ibd,.frm⽂件,恢复数据表

本文详细记录了一次在PaaS环境中,由于误删MySQL数据库表文件导致的问题及解决过程。首先,由于innodb_force_recovery设置不当,数据库启动报错。接着,尝试创建表和查看表结构时遇到错误。为了解决问题,进行了数据库备份,删除数据库,清理数据文件,并重新导入表结构。最后,调整my.cnf配置,成功创建表。整个过程中,涉及了数据库故障排查、数据恢复和配置管理等关键环节。
摘要由CSDN通过智能技术生成

⼀、背景

在我们的PaaS底座中,mysql数据库是运行在sts类型的pod中,构成mysql主从架构。客户方需要清空库中的某个表的数据,但是需要保留表。由于新同学图省事,直接删除了数据目录下的表文件,导致在数据库中的这个表消失后无法再被创建。原因是表空间存在该名称表;

二、排查过程

1、mysql启动报错:

  • 使用kubect logs 查看到的mysql日志
    在这里插入图片描述

2、创建表报错;

  • 进库创建表时报错报错:ERROR:Tablespace tablename exists.
    在这里插入图片描述

3、使用desc查看表结构报错;

  • 查看表结构,又会有这个报错:ERROR:Table tablename doesnt exists
    在这里插入图片描述

三、解决⽅法:

备份数据库表结构,删除数据库,重新导⼊表,创建表;
1、修改数据库my.cnf配置(修改configmap配置)

  • 修改innodb_force_recovery=2,修改后mysql启动报错就没有了,可以正常启动
修改my.cnf配置,并保存
innodb_force_recovery=2 防⽌数据写⼊,更新,删除操作
重启数据库后,重新创建表

2、备份数据库

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

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,

4、重新导⼊表

mysql -uroot -pxxxx 1 dbname <dbname.sql

5、创建表;

  • 这时候创建表依旧报错了:原因是我们之前修改的my.cnf配置,需要将能禁止数据库正删改查的配置参数改为0
  • 报错信息:ERROR 1030 (HY000) : Got error 168 from storage engine;
create table tablename;

在这里插入图片描述
查看日志信息:
在这里插入图片描述

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

在这里插入图片描述

1.2.2 制作安装盘
下载操作系统-CentOS7.6, 下载地址: 
https://vcs-baseline.oss-cn-hangzhou.aliyuncs.com/CentOS-7-x86_64-DVD-1810.iso
这里使用U盘安装操作系统,制作安装系统启动U盘可参考网上教程 
通常安装过程:将镜像文件上传到服务器,插入U盘,对U盘进行格式化(mkfs.xfs /dev/U盘),然后将镜像文件写入U盘(dd if=镜像文件路径of=/dev/U盘 bs=4M)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值