网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
sudo ls -l /etc/systemd/system/multi-user.target.wants/mysql*
您将收到如下输出:
...
启用或禁用 systemd 服务会在默认目标的 wants 目录中创建或删除符号链接。
如果愿意,再次重启 Droplet,当它重新上线时运行 ps -ef
命令来检查服务状态。
ps -ef | grep mysql
此命令将提供有关 MySQL 是否正在运行的信息:
...
现在,您已经配置了 MySQL 在重启后重新启动。接下来,您将考虑崩溃情况。
使用 systemd
配置 MySQL 在崩溃后自动启动
作为一款现代应用程序,MySQL 已经配置为在崩溃后自动启动。让我们看看如何禁用它。
在编辑器中打开 MySQL 服务单元文件:
sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service
在头部信息之后,文件的内容如下:
...
如您所见,Restart 参数的值被设置为 on-failure。这意味着 MySQL 服务将在不干净的退出代码或超时时重新启动。
systemd 服务的 man 页面显示了 Restart 参数的以下表格:
重启设置/退出原因 | no | always | on-success | on-failure | on-abnormal | on-abort | on-watchdog |
---|---|---|---|---|---|---|---|
清洁的退出代码或信号 | X | X | |||||
不干净的退出代码 | X | X | |||||
不干净的信号 | X | X | X | X | |||
超时 | X | X | X | ||||
看门狗 | X | X | X | X |
在 systemd 服务单元文件中,两个参数 - Restart
和 RestartSec
- 控制崩溃行为。第一个参数指定服务何时应重新启动,第二个参数定义了它在重新启动之前应等待多长时间。
为了测试崩溃行为,使用 kill -9 信号停止 MySQL 进程。在我们的情况下,主 PID 是 851;请用您自己的 PID 替换它:
ps -ef | grep mysql
sudo kill -9 851
等待几秒,然后检查状态:
sudo systemctl status mysqld.service
输出将显示 MySQL 已使用新的 PID 重新启动(在我们的情况下,新的进程 ID 是 1513):
...
接下来,重新打开单元文件:
sudo vi /etc/systemd/system/multi-user.target.wants/mysqld.service
注释掉 MySQL 守护进程单元文件中的 Restart 指令并保存。这将禁用重新启动行为:
...
之后,重新加载 systemd 守护进程,然后重新启动 mysqld 服务:
sudo systemctl daemon-reload
sudo systemctl restart mysqld.service
您可以通过运行此命令找到服务的主 PID:
sudo systemctl status mysqld.service
...
Main PID: 1895 (mysqld)
使用 kill -9
命令,在您的环境中杀死 MySQL PID 的主 PID(我们在测试环境中使用 PID)。
sudo kill -9 1895
检查 MySQL 的状态:
sudo systemctl status mysqld.service
它将显示服务已失败:
...
尝试多次查找服务状态。每次服务都将显示为 failed
。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!