在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_RunningSlave_SQL_Running 的行。
    • /Slave_.*_Running:/:匹配包含 Slave_IO_RunningSlave_SQL_Running 的行。
    • {print $1$2}:打印第一列和第二列的内容,格式为 Slave_IO_Running:YesSlave_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#*:}:提取 : 之后的部分,即状态值(如 YesNo)。

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,说明主从复制的某个线程(IOSQL)出现了问题。
  • 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 循环。

总结

这个脚本的主要功能是:

  1. 连接到 MySQL 服务器,获取主从复制的状态。
  2. 检查 Slave_IO_RunningSlave_SQL_Running 的状态是否为 Yes
  3. 如果发现状态异常(不是 Yes),通过企业微信机器人发送告警信息。
posted @ 2024-09-06 17:24  姬高波  阅读(43)  评论(0)    收藏  举报