首页>文档>笔记>使用Monit实现MySQL监控并自动重启

使用Monit实现MySQL监控并自动重启

服务器上安装有多个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/

个人中心
有新私信 私信列表
搜索