前面几天,一个微信朋友求助,数据库异常断电后,数据库服务启动报错,一直没有找出原因,我之前也没遇到过,我对此很好奇,所以我尝试了一下,是否能帮助他解决问题
遇到问题,我个人觉得日志跟监控很关键,首先我叫他备份启动日志,然后清理日志,查看是否有相关无法在启动,然后kill掉mysql 所有相关进程,然后重启服务,打印最新的一份启动日志,方便查看问题
1. 在kill服务的时候遇到一个问题,刚开始是手动的使用ps -elf | grep mysql去查看相关进程,然后在kill + pid ,这么哥们遇到一个现象就是查看进程的时候有,但是kill的时候就报错,没有这个进程
然后再次查看mysql相关进程,发现服务依旧存在,但是pid号确发生了变化,这个怎么办呢,其实也很简单,awk命令加kill命令结合,使用管道符号 ‘|’ 一条命令搞定,动态获取pid,终于把进程干掉了,然后尝试重启服务,让他把错误日志发给我,里面看到了这个错误
我就猜想,断电重启后,innodb 数据有损坏,导致无法重启,我想到了一个参数innodb_force_recovery从1开始,最后尝试到6,后面终于重启,但在这个过程中,从打印日志来看,服务一直在在反复尝试强制重启,一直没有启动,快要放弃的时候,最终启动成功,我认为这种强制恢复应该需要一点时间,也许不用调到6,只是第一次遇到,没有耐心等待恢复
你以为到这儿也许应该就可以了,后面这位朋友反馈,说强制参数关闭后,服务就立马挂了,
其实服务启动了就好办了,你么觉得呢,下面是我创建的群,欢迎入群
一起探讨,一起成长,欢迎留言,希望能带给你思考,mysql星探期待你的加入