实验环境: centos7.9 + percona rpm方式安装的 8.0.37
先试下kill -9 ,如下图:
可以看到kill -9后,systemd会自动重新拉起一个mysqld进程。
再试下kill -15,如下图:
可以看到systemd没有自动拉起新的mysqld进程。 如果要启动mysqld,还需要执行 systemctl start mysqld 才可以。
为啥会出现这种情况??
原因藏在了MySQL的systemd的配置文件里,如下:
注意上图中标红的地方, 在systemd中,Restart 一般有如下几种值:
no:默认值,表示服务不会自动重启。
on-success:如果服务以成功状态(即退出码为0)退出,则会重启服务。
on-failure:如果服务以失败状态(即非零的退出码)退出,则会重启服务。这是比较常用的设置,可以确保服务在遇到错误时自动尝试恢复。
on-abnormal:如果服务异常终止(例如被信号杀死或超出了资源限制),则会重启服务。
on-watchdog:如果 watchdog 超时导致服务被终止,则会重启服务。这通常用于那些配置了 WatchdogSec 的服务。
on-abort:这是一个较旧的术语,现在等同于 on-abnormal。
always:无论服务如何退出,都会重启服务。
根据上面的2个实验:
因为 kill -15的退出码是0(通常正常的退出码都是0的),因此systemd不会再次尝试拉起MySQLD进程。
因为 kill -9 的退出码非0,满足了on-failure 这个条件,因此systemd会尝试再次拉起MySQLD进程。
此外,关于mysqld_safe的也是类似的,可参考下面这2篇:
https://cloud.tencent.com/developer/article/2327347 【GreatSQL】
https://cloud.tencent.com/developer/article/1971013
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。