先说背景
我的程序安装脚本会自动部署mysql5.5的generic到系统,并设置好服务脚本,然后启动mysql开始初始化数据库
这个安装包我是移交给专职负责装机的同事
最近现场经常反映,mysql数据库无法启动
问题排查流程:
1.查文件全不全,/etc/my.cnf正确,/etc/init.d/mysql存在
2.systemctl status mysql显示服务启动
3.mysql登录报错
4.查linx.pid也就是mysql服务启动后会创建一个含有进程pid的文件,该文件不存在
5.重新执行安装脚本,故障依旧
6.同事怀疑是mysql服务启动后立即进行导库不行,要加延时,我又找了mysqladmin ping的方法来等待mysql服务启动,其实只要systemctl start mysql返回了就是服务启动成功了
7.执行加入等待mysql服务的安装脚本,现象复现,脚本卡在了等待mysql服务启动这一行
8.查看/etc/init.d/mysql,日期为2017年,大小5k,我自己的服务脚本是10k,这应该是系统自带的mysql脚本,虽然已经卸载了旧版mysql软件包,但是服务脚本没有被更新
9.再查看程序安装包,发现要替换的mysql服务脚本不见了,可能是被误删了,替换/etc/init.d/mysql,重新启动服务,安装脚本能够继续执行了
结论:debian体系的软件包卸载后并不会删除配置文件和服务脚本,所以导致我们看到了假的mysql服务启动现象,从而引发了判断方向错误
今后再遇到pid文件无法创建,要从服务是否真的启动,也就是mysql进程是否存在开始查