文章目录[隐藏]
1. 背景
租用的阿里云性能实在捉襟见肘,总是提示mysql server挂掉了,原因大概是swap不足,先不查询swap的问题,想着mysql server挂掉了,能不能监测到自动重启以下,免得没及时发现。
2. 过程
最近学着用ChatGPT解决问题,于是看看它能不能给我答案。提问过程如下:
- 问题1:“我需要在FreeBSD后台监控mysql server 的运行状态,如果它因为各种原因停止了运行,需要自动重启”。GPT给出的答案基本上是使用
daemon
命令和rc.d
脚本,后面的自动重启告诉我可以在机器启动的时候自动启动mysql,没有实现我要求的监控进程停止运行后自动重启。 - 于是接着问,问题2:“我说的自动重启不是在开机时候启动,是mysql-server 在异常退出时,能够检测到并自动重启”。这次它告诉我可以使用Supervisor来监控和管理进程。这个一个第三方软件包,看名称是一个基于python 2.7的版本,于是放弃,接着问。
- 问题3:“有没有其他方法。” GPT给出了一个使用systemd的方法。看了下配置过程,好像是给Linux配置的,FreeBSD相关路径没有对应的配置文件,于是急需问。
- 问题4:“这个方法适用于freebsd 11么?” GPT给出了一个新的解决方案,使用
monit
来监控和管理MySQL服务器进程,并在其异常退出时自动重启。也需要安装一个新的第三方包,于是接着问: - 问题5:“FreeBSD有自带的监控服务器进程的工具么?不用装新的pkg的?”这次给出了使用
watchdogd
的方法。最终选择这个方法配置。
3. 采用的watchdogd方法
FreeBSD有一个名为`watchdogd`的守护进程,可以用来监控和自动重启其他进程,包括MySQL服务器。以下是一种使用`watchdogd`的方法:
1. 编辑配置文件:使用以下命令编辑`/etc/rc.conf`文件:
# sudo vi /etc/rc.conf
2. 在文件中添加以下行来配置watchdogd:
watchdogd_enable="YES"
watchdogd_flags="-t 60 -T 10 -e /usr/local/etc/rc.d/mysql-server.sh" # 请根据实际路径修改
watchdogd_program="" #老版本可能用过这个配置,在FreeBSD 13.X确认要按照上面加-e 方式配置。
在这些配置中,你可以根据需要自定义超时时间(-t)和触发重启时间(-T)。确保将路径`/usr/local/etc/rc.d/mysql-server.sh`替换为适用于你系统中MySQL启动脚本的实际路径。
3. 创建一个简单的启动脚本:创建一个名为 `mysql-server.sh ` 的文件,并写入以下内容:
#!/bin/sh
/usr/local/etc/rc.d/mysql-server status >/dev/null
if [ $? -ne 0 ]; then
/usr/local/etc/rc.d/mysql-server restart >/dev/null
fi
exit 0
保存并退出文件。
4. 赋予脚本执行权限:运行以下命令以赋予脚本执行权限:
#sudo chmod +x /usr/local/etc/rc.d/mysql-server.sh
5. 启动watchdogd服务:运行以下命令以启动watchdogd服务:
sudo service watchdogd start
现在,watchdogd将监控MySQL服务器进程,并在其异常退出时自动重启。