MySQL主从复制状态监控脚本

一. 主从复制存活状态监控脚本

[root@host-47-98-97-124 scripts]# mysql-master-slave-status.sh

#!/bin/bash

port=`ss -ntlp | grep 3306 | awk '{print $4}' | awk -F":" '{print $2}'`

array=($(mysql -uroot -p123456 -e "show slave status\G"|egrep "Running|Seconds_Behind_Master" | awk '{print $2}'))

if [ "$port" == "3306" ];then

    if [ "${array[0]}" == "Yes" ] && [ "${array[1]}" == "Yes" ] && [ "${array[2]} " == "0" ];then

        echo "MySQL slave status is ok !"

    else

        echo "MySQL slave status is wrong !"
    fi
fi



注:
1.==用于字符串比较,-eq用于数字比较,这里port是字符串
2.array是一个数组是用来存储Slave_IO_Running和Slave_SQL_Running的值,另外$(cmd)这个是用来执行括号里面cmd的命令的,而array数组则是用()扩起来的

二、 主从复制延时时间监控脚本

url:https://www.cnblogs.com/kevingrace/p/6274073.html

方法一:

[root@host-47-98-97-124 scripts]# cat mysql-copy-delay-time.sh

#!/bin/bash

num=`/usr/bin/mysql -uroot -p123456 -e "show slave status\G" | grep Seconds_Behind_Master | awk '{print $2}'`

if [ $num -eq 0 ];then

    echo "Master and slave replication is consistent"

else

    echo "Master and slave replication is inconsistent"

fi


方法二:
[root@host-39-108-217-12 scripts]# cat mysql-copy-delay-time.sh 
#!/bin/bash

/usr/bin/pt-heartbeat --database zabbix --table=heartbeat --monitor --host=39.108.217.12 --user=repsta --password=123456 --log=/opt/master-slave.txt --master-server-id=1  --daemonize

cat /opt/master-slave.txt > /opt/master_slave.txt

max_time=`cat /opt/master_slave.txt  | grep -v '^$' | awk '{print $1}' | sort -k 1 -nr | head -1`

NUM=$(echo "$max_time"|cut -d"s" -f1)

if [ $NUM == "0.00" ];then

    echo "Master slave replication has no delay"

else

    echo "Master slave replication delay,time $max_time"

fi

三、主从复制数据一致性及强制同步监控脚本

[root@host-39-108-217-12 scripts]# cat mysql-data-consistent-status.sh
#!/bin/bash

NUM=`/usr/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums  --databases=zabbix h=39.108.217.12,u=repsta,p=123456,P=3306 | awk 'NR>3{sum+=$3}END{print sum}'`

if [ $NUM -eq 0 ];then

    echo "Data is consistent!"

else

    echo "Data is error!"
    /usr/bin/pt-table-sync --replicate=test.checksums h=39.108.217.12,u=repsta,p=123456 h=47.106.141.17,u=repsta,p=123456 h=47.98.97.124,u=repsta,p=123456  --print
    /usr/bin/pt-table-sync --replicate=test.checksums h=39.108.217.12,u=repsta,p=123456 h=47.106.141.17,u=repsta,p=123456 h=47.98.97.124,u=repsta,p=123456  --execute
fi
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,以下是一个简单的监控MySQL主从同步状态脚本的示例: ``` #!/bin/bash # MySQL主从同步状态监控脚本 # MySQL连接信息 MYSQL_HOST="localhost" MYSQL_PORT="3306" MYSQL_USER="root" MYSQL_PASSWORD="password" # 检查间隔时间(秒) CHECK_INTERVAL=10 # 报警阈值(秒) ALERT_THRESHOLD=60 # 报警通知邮箱 ALERT_EMAIL="alert@example.com" # 检查主从同步状态 function check_slave_status() { # 连接MySQL,执行show slave status命令,获取主从同步状态 slave_status=$(mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -e "show slave status\G") # 解析主从同步状态 slave_io_running=$(echo "$slave_status" | grep -w "Slave_IO_Running:" | awk '{print $2}') slave_sql_running=$(echo "$slave_status" | grep -w "Slave_SQL_Running:" | awk '{print $2}') seconds_behind_master=$(echo "$slave_status" | grep -w "Seconds_Behind_Master:" | awk '{print $2}') # 判断主从同步状态是否正常 if [[ "$slave_io_running" == "Yes" && "$slave_sql_running" == "Yes" && "$seconds_behind_master" -lt "$ALERT_THRESHOLD" ]]; then echo "MySQL主从同步状态正常,Seconds_Behind_Master: $seconds_behind_master" else echo "MySQL主从同步状态异常,Slave_IO_Running: $slave_io_running, Slave_SQL_Running: $slave_sql_running, Seconds_Behind_Master: $seconds_behind_master" # 发送报警邮件 echo "MySQL主从同步状态异常,请尽快处理!" | mail -s "MySQL主从同步状态异常" $ALERT_EMAIL fi } # 循环检查主从同步状态 while true; do check_slave_status sleep $CHECK_INTERVAL done ``` 该脚本会定期执行show slave status命令,获取主从同步状态,并判断同步状态是否正常。如果发现同步状态异常,则发送报警邮件通知DBA团队处理。可以根据实际情况修改脚本中的MySQL连接信息、报警阈值、报警通知邮箱等配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值