MySQL磁盘满了后数据文件被损坏

故障现象:一套mysql数据库,数据文件所在的磁盘空间满了,数据库宕机了;清理文件再启动数据库报错[ERROR] InnoDB: Header page contains inconsistent data in datafile,启动不了

尝试innodb force recovery从1-6逐一尝试启动数据库,启动后通过mysqldump重新将表导出导入,当时但是dba反馈数据库启动后就无法导出。应该在尝试一下。

然后,dba报故启动后报错[ERROR] InnoDB: Failed to find tablespace for table XXX in the cache

当时尝试使用innodbchecksum检查执行innochecksum /data/mysql/data_5.7.19/ibdata1都没是没有返回,怀疑是文件没有报错。

知数堂叶老师的办法

叶问(20190604):MySQL错误日志出现[Note] InnoDB: Discarding tablespace of table db.table: Data structure corruption产生可能的原因及解决办法?
一、产生原因
从错误日志即可判断出表空间ibd文件发生了物理损坏,那么其中的可能包括如下:
1、数据库服务器异常down机/断电等
2kill -9强制关闭mysqld
3、表空间导出导入过程中发生的ibd文件损坏
4、人为损坏ibd文件
5、底层物理I/O设备损坏,导致文件损坏

二、解决办法
1、从其他实例(如slave)上进行表空间传输进行导入或进行SQL导出导入
2、从历史备份中进行全量+增量恢复完整的ibd文件后再进行表空间传输或进行SQL导出导入
3、尝试innodb force recovery从1-6逐一尝试启动数据库,启动后通过mysqldump重新将表导出导入,建议重3开始
4、考虑使用工具undrop-for-innodb从index page尝试数据恢复

undrop-for-innodb参考

undrop-for-innodb工具在无备份的情况下恢复数据库 - 知乎
https://zhuanlan.zhihu.com/p/145245636

MySQL · 数据恢复 · undrop-for-innodb
http://mysql.taobao.org/monthly/2017/11/01/

MySQL · 数据恢复 · undrop-for-innodb - 海东潮 - 博客园
https://www.cnblogs.com/DataArt/p/9873182.html

参考

(3条消息) MySQL借助ibd文件恢复数据技巧_Listen2You的博客-CSDN博客
https://blog.csdn.net/Listen2You/article/details/76283858

MySQL借助ibd文件恢复数据技巧? | 《Linux就该这么学》
https://www.linuxprobe.com/mysql-recovery-data.html

mysql服务器硬盘损坏后的数据恢复-362931297-ChinaUnix博客
http://blog.chinaunix.net/uid-26950862-id-4133641.html

MySQL innochecksum 工具
https://baijiahao.baidu.com/s?id=1653169818857958850&wfr=spider&for=pc

原文地址:https://www.cnblogs.com/paul8339/p/14803023.html