CentOS 7 默认安装 MySQL5.7.23, 服务管理发生了变化, 从 sysvinit(service MySQL start)变化为 systemd(systemctl start mysqld.service)
最近测试了下 MySQL5.7.23 的服务管理参数, 测试主要涉及 Restart ,RestartPreventExitStatus,RestartSec,StartLimitInterval 四个服务启动参数.
[服务启动方式比较]
1,CentOS7 下 MySQL5.7.23 默认参数下的服务启动方式
MySQL crash,OOM,kill -9 pid 三种情况下 mysqld 进程被终止, 都会马上重新启动, 间隔 100ms
systemctl stop mysqld@service 不会自动重启
2,CentOS6 下 MySQL5.6.21 的服务启动情况
MySQL crash,OOM crash 和 oom kill 的是 mysqld 进程, 由于存在 mysqld_safe 的守护进程, 会自动重启 mysqld
对于 kill -9 的命令, 如果只 kill -9 mysqld 进程, mysqld_safe 守护进程会重启 mysqld, 如果 mysqld_safe 也被 kill 掉, 那么 mysqld 就不会被拉起来
service MySQL stop 不会自动重启
[在 CentOS 7 下如何实现 kill -9 mysqld 后不自动重启]
RestartPreventExitStatus= 中列出的退出码或信号永远不会导致该服务被重启
修改 RestartPreventExitStatus=1 SIGKILL, 增加 kill -9 对应的信号 SIGKILL
测试 kill -9,mysqld 进程不会自动重启
测试 OOM,mysqld 进程也不会自动重启
原因是由于 OOM 在 kill 进程时传的也是 SIGKILL 的信号
[需要关注的服务配置的两个参数]
1,RestartSec 设置在重启服务 (Restart) 前暂停多长时间, 默认值是 100ms, 就是 mysqld 进程 OOM 或 kill 后等待 100ms 就会马上重启
我们 MHA 中配置的 ping_interval=10, 意思是 MHA Manager 每 10 秒 ping 一次 master, 尝试 3 次失败后, 进行 failover
这个参数需要评估下, 是否做设定, 比如如果希望发生上面异常, 能被 MHA 检测到, 那么最保险的是间隔 30 秒再重启 MySQL 进程, 需要指定 RestartSec=30
2,StartLimitInterval
设置单元的启动频率限制. 默认一个单元在 10 秒内最多允许启动 5 次. 建议修改为 StartLimitInterval=0, 无限制重启.
来源: http://www.linuxidc.com/Linux/2018-10/154977.htm