服务器上安装有多个MySQL数据库(不同端口号)时,同时存在mysqld进程,通过脚本判断进程无法知晓是哪个停止,通过使用Monit来监控某个MySQL停止时自动重启,也可以通过脚本监听MySQL端口号来实现。
一:监听端口号实现自动重启脚本
前提条件服务器上需安装nc,监听脚本:
#!/bin/bash # 检查3306端口是否开放的函数 check_port() { local port=$1 local host="localhost" # 使用nc命令检查端口是否开放 nc -z -w5 $host $port # 如果nc命令返回0,说明端口开放 return $? } # 启动MySQL服务的函数 start_mysql() { # 使用service命令启动MySQL服务 # 注意:根据你的Linux发行版,命令可能会有所不同 # 例如,在一些系统上,你可能需要使用 systemctl 或 /etc/init.d/mysql start /etc/init.d/mysqld start } # 主循环 while true; do # 检查3306端口是否开放 check_port 3306 if [ $? -ne 0 ]; then echo "MySQL is not running on port 3306. Attempting to start it..." # 尝试启动MySQL服务 start_mysql # 检查MySQL是否成功启动 sleep 5 # 等待MySQL启动 check_port 3306 if [ $? -eq 0 ]; then echo "MySQL started successfully." else echo "Failed to start MySQL. Please check the logs for more information." fi fi # 每隔一段时间检查一次端口(例如,每分钟检查一次) sleep 60 done
二:使用Monit实现,前提服务器需安装Monit
以 MySQL/MariaDB 为例,创建:/etc/monit/conf.d/mysql 文件,输入一下内容:
check process mysql with pidfile /run/mysqld/mysqld.pid
start program = “/usr/sbin/service mysql start” with timeout 60 seconds
stop program = “/usr/sbin/service mysql stop”
if failed unixsocket /var/run/mysqld/mysqld.sock then restart
/run/mysqld/mysqld.pid 和 /var/run/mysqld/mysqld.sock 就是数据库的两个文件,一般来说通过软件源安装的二进制 MySQL、MariaDB 默认就是这两个位置。
然后检测语法是否有错误:
monit -t
如果有提示如下语句,那么就是可用的:
Control file syntax OK
重启 Monit 生效:
systemctl restart monit
原文地址:https://blog.mf8.biz/monit-mysql-aoto-restart/