1. 背景

租用的阿里云性能实在捉襟见肘,总是提示mysql server挂掉了,原因大概是swap不足,先不查询swap的问题,想着mysql server挂掉了,能不能监测到自动重启以下,免得没及时发现。

2. 过程

最近学着用ChatGPT解决问题,于是看看它能不能给我答案。提问过程如下:

  1. 问题1:“我需要在FreeBSD后台监控mysql server 的运行状态,如果它因为各种原因停止了运行,需要自动重启”。GPT给出的答案基本上是使用daemon命令和rc.d脚本,后面的自动重启告诉我可以在机器启动的时候自动启动mysql,没有实现我要求的监控进程停止运行后自动重启。
  2. 于是接着问,问题2:“我说的自动重启不是在开机时候启动,是mysql-server 在异常退出时,能够检测到并自动重启”。这次它告诉我可以使用Supervisor来监控和管理进程。这个一个第三方软件包,看名称是一个基于python 2.7的版本,于是放弃,接着问。
  3. 问题3:“有没有其他方法。” GPT给出了一个使用systemd的方法。看了下配置过程,好像是给Linux配置的,FreeBSD相关路径没有对应的配置文件,于是急需问。
  4. 问题4:“这个方法适用于freebsd 11么?” GPT给出了一个新的解决方案,使用monit来监控和管理MySQL服务器进程,并在其异常退出时自动重启。也需要安装一个新的第三方包,于是接着问:
  5. 问题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服务器进程,并在其异常退出时自动重启。