某张业务表查询时报页损坏,服务重启后仍然报错,其他表一切正常,备份文件是三天前的。
真正麻烦的地方在于,几个原因的现象几乎一样。异常关机导致页写入不完整。也可能是磁盘坏道落在数据文件所在的块上。
少数情况下是文件系统层面发生过静默损坏。
第一件事是确认损坏范围和错误页
mysql -e 'check table 表名'
尝试导出还能读的数据
mysqldump -u root -p 库名 表名 > /data/t.sql
然后用恢复模式启动并导出
grep -n innodb_force_recovery /etc/my.cnf
末了重建表后导入数据
mysql -e 'create table 表名 like 备份表'
同事提醒我看一下最近一次发布,时间点确实对得上。
命令输出我都留了记录,免得改完记不清原来的值。
别只看报错消失,验证要多做一步。表能正常读写,校验通过,业务查询不再报页损坏。
强制恢复模式只适合导出数据,写操作会失败;确认数据导出后要立刻重建实例,别长期带着这个参数跑。这类问题最好一次改到位,反复小改反而容易把原因搅混。