在shell脚本中:监控MySQL主从同步状态是否异常脚本
监控MySQL主从同步状态是否异常脚本
脚本作用:监控MySQL主从同步状态是否异常脚本
#!/bin/bash
HOST=localhost
USER=root
PASSWD=123.com
IO_SQL_STATUS=$(mysql -h$HOST -u$USER -p$PASSWD -e 'show slave status\G' 2>/dev/null |awk '/Slave_.*_Running:/{print $1$2}')
for i in $IO_SQL_STATUS; do
THREAD_STATUS_NAME=${i%:*}
THREAD_STATUS=${i#*:}
if [ "$THREAD_STATUS" != "Yes" ]; then
echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!" | curl 企业微信机器人webhook地址地址
fi
done
#1、定义变量
#2、获取 MySQL 从服务器状态
#3、遍历状态
#4、提取线程名称和状态
#5、检查状态
#6、发送通知实现告警
1. 脚本头部
#!/bin/bash
- 这是脚本的 Shebang 行,指定了脚本使用的解释器是
/bin/bash,即 Bash shell。
2. 定义变量
HOST=localhost
USER=root
PASSWD=123.com
HOST:MySQL 服务器的地址,这里是localhost。USER:用于连接 MySQL 的用户名,这里是root。PASSWD:用于连接 MySQL 的密码,这里是123.com。
3. 获取 MySQL 主从复制状态
IO_SQL_STATUS=$(mysql -h $HOST -u $USER -p $PASSWD -e 'show slave status\G' 2>/dev/null | awk '/Slave_.*_Running:/{print $1$2}')
mysql -h $HOST -u $USER -p $PASSWD -e 'show slave status\G':- 使用
mysql命令行工具连接到 MySQL 服务器。 -h $HOST:指定主机地址。-u $USER:指定用户名。-p $PASSWD:指定密码。-e 'show slave status\G':执行SHOW SLAVE STATUS\G命令,该命令以垂直格式显示主从复制的状态信息。
- 使用
2>/dev/null:将标准错误重定向到/dev/null,即忽略错误输出。| awk '/Slave_.*_Running:/{print $1$2}':- 使用
awk处理SHOW SLAVE STATUS的输出,提取包含Slave_IO_Running和Slave_SQL_Running的行。 /Slave_.*_Running:/:匹配包含Slave_IO_Running和Slave_SQL_Running的行。{print $1$2}:打印第一列和第二列的内容,格式为Slave_IO_Running:Yes或Slave_SQL_Running:No。
- 使用
4. 遍历状态信息
for i in $IO_SQL_STATUS; do
- 遍历
IO_SQL_STATUS变量中的每一行内容。
5. 提取状态名称和状态值
THREAD_STATUS_NAME=${i%:*}
THREAD_STATUS=${i#*:}
${i%:*}:提取:之前的部分,即状态名称(如Slave_IO_Running)。${i#*:}:提取:之后的部分,即状态值(如Yes或No)。
6. 检查状态是否正常
if [ "$THREAD_STATUS" != "Yes" ]; then
echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!" | curl 企业微信机器人webhook地址
fi
if [ "$THREAD_STATUS" != "Yes" ]; then:- 检查状态值是否为
Yes。如果不是Yes,说明主从复制的某个线程(IO或SQL)出现了问题。
- 检查状态值是否为
echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!":- 打印错误信息,格式为
Error: MySQL Master-Slave Slave_IO_Running status is No!。
- 打印错误信息,格式为
| curl 企业微信机器人webhook地址:- 使用
curl将错误信息发送到企业微信机器人的 Webhook 地址,以便通知相关人员。
- 使用
7. 循环结束
done
- 结束
for循环。
总结
这个脚本的主要功能是:
- 连接到 MySQL 服务器,获取主从复制的状态。
- 检查
Slave_IO_Running和Slave_SQL_Running的状态是否为Yes。 - 如果发现状态异常(不是
Yes),通过企业微信机器人发送告警信息。

浙公网安备 33010602011771号