故障背景:
用户发来求助,说有一套Mysql数据库出现问题,无法正常启动,磨不过人情,着手开始处理。
故障分析
相对于oracle,PG。Mysql目前没有一套通用的安装规范,启动命令各不相同,一般分为systemctl启动,/etc/init.d/mysqld启动,support-files/mysql.server启动,mysql_safe启动等等。所以着手接触一套Mysql数据库,可以使用history查看数据库的具体启动命令
--使用systemctl启动 history|grep systemctl --使用mysqld启动 history|grep mysqld --使用support启动 history|grep mysql.server
复制
文中数据库使用/etc/init.d/mysqld命令启动,运行history中的历史命令尝试启动后,发现命令和error报错中没有任何输出。有些时间没有接触过Mysql了,一下子没有头绪了,第一个想法是报错日志中为什么没有任何输出,会不会是参数配置的问题,基于这个想法,在/etc/my.cnf设置了一个log_error_verbosity=3,增加errlog的输出内容。
--启动数据库
# /etc/init.d/mysqld start
--配置参数
# echo "log_error_verbosity=3" >> /etc/my.cnf
# cat /etc/my.cnf
复制
重新启动数据库,问题依然没有得到改善,命令行和错误日志中,还是没有任何输出。实话实说到这里有点懵,如果太久没有接触一款数据库,一下子失去了对数据库的触觉,没辙,找以前留下的脚本寻找灵感。接下里,又尝试了几种操作,直到使用support-files/mysql.server启动,终于出现了错误记录,但是奇怪的是errlog中还是没有任何报错信息。
# support-files/mysql.server start
Starting MySQL....The server quit without updating PID file[FAILED]mysql/mysql.pid).
复制
这个问题之前碰到过几次,基本都是由于目录权限过小或属主不对,导致无法正常生成mysql.pid导致。查看了Mysql文件目录的权限,发现都正常,继续懵。这次百度灵感:
别说,还真有一篇文章推荐:https://www.modb.pro/db/111678
按照文章中提到的方法进行操作,还是没能处理问题。静下心,仔细分析了故障的现象。数据库没有写errlog,那么实际上是否意味着数据库其实没有正常启动呢?而在数据库启动中,肯定要使用my.cnf参数文件,那么会不会是my.cnf的参数设置问题呢?
故障定位
仔细检查了/etc/my.cnf文件,果然发现[mysqld]选项下,有数个user+password组合,注释掉后,重启数据库。发现数据库可以正常启动了。
故障总结
会导致出现The server quit without updating PID file的故障非常多,但是如果没有生成任何errlog信息,首先还是推荐查看mysql.server脚本和my.cnf文件,这两个文件都会导致Mysql无法正常启动。
附上很久之前整理的my.cnf适配8.0和5.7的参数,不敢说是最佳实践,大家一起共同学习:
5.7:https://www.modb.pro/download/239222
8.0:https://www.modb.pro/download/255125