1.复盘经过
客户的服务器是私有云,但是据说机房停电了。。 机房停电了。。 所有机器就断电关机了。重启机器后,能坏的就都坏了。MMP
2.现象
mysql服务是能起来的,但是会自动停止服务,触发条件不知。
这个故障确实不好发现:
首先,mysql服务是能起来的,但是会随机自动停止服务,条件也不知,才想起来去找找mysql的日志,一般log路径就在mysql的数据目录,笔者如下:
这个结尾为.err的文件就是:
打开日志,就会发现一个错误日志频繁出现:
表的 page 坏了
3.解决经过
网上找了一圈,用mysql自带的mysqlcheck貌似有机会修复,大家貌似都是这么写的,在mysqk8的环境下, 加上-repair 貌似不对。。
mysqlcheck -u root -p 你的数据库名称 -repair
反正我是这么写的
mysqlcheck -repair -u root -p 你的数据库名称
后面mysql会帮你检查这个数据库,但是如果你的表是innodb,大概率没个卵用。。
命令会报这么个错误:
The storage engine for the table doesn't support repair
意思是:“该表的存储引擎不支持修复”,通过表设计查看,可以看到该表的引擎是InnoDB。
InnoDB支持外键参照完整性,具备故障恢复能力,所以不需要修复!
我只想说:你看看你这是人话吗?你他娘的也没有自动修复啊!
折腾一圈后发现,把 -repair 去掉,让mysqlcheck只检查呢?
于是:
mysqlcheck -u root -p 你的数据库名称
果然有用,mysqlcheck会扫描你制定库的每一张表(扫描顺序,好像是按字母排序的),哪个检查报错,那就这个报错的表有问题了,dump该表,重建,导入即可。
我的是这个t_neworgid表的下一个表,t_opxxx,我直接dump出来,然后drop, 重新创建表,导入备份的数据,解决!