故障现象:一套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机/断电等 2、kill -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