美文网首页
mysql主从复制监控的脚本

mysql主从复制监控的脚本

作者: 刘小白DOER | 来源:发表于2020-10-05 22:58 被阅读0次

    今天笔者找到一个不错的mysql主从复制监控的脚本,经过测试正常。详情参考文章-Mysql实例连接数和主从复制延迟监控以及自动化告警推送 。

    自己有双主复制的两个树莓派,修改好脚本后在两台机上部署,可以分别监控复制状态。从机主要监控三个状态:Slave_SQL_Running、Slave_IO_Running、Seconds_Behind_Master。主从机监控information_schema.processlist连接数、配置的max_connections最大连接数以及两个参数比值代表的连接百分比。

     mysql_repl_monitor.sh脚本如下:

#!/bin/bash

#日志模块

curdate=$(date +"%Y%m%d")

curtime=$(date +'%Y-%m-%d %H:%M:%S')

logname="repl_check_"$curdate".log"

logfile=/home/pi/repl_check_log/$logname

user=phpmyadmin

passwd=root

# 从库实例

slave_ip=localhost

slave_port=3306

# 主库实例

master_ip=192.168.31.82

master_port=3306

# 实例复制状态巡检

function SlaveCheck() {

send_flag="init"

ProcCnt=0

io_thread=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -e"show slave stat                                                                                        us\G" |grep Slave_IO_Running: |awk '{print $2}')

sql_thread=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -e"show slave sta                                                                                        tus\G" |grep Slave_SQL_Running: |awk '{print $2}')

slv_delay=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -e"show slave stat                                                                                        us\G" |grep Seconds_Behind_Master: |awk '{print $2}')

ProcCnt=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -Ne"select count(*)                                                                                        from information_schema.processlist;")

TotalProc=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -Ne"show variables                                                                                        like 'max_connections';" |awk '{print $2}')

ProcPct=$(printf "%d" $((ProcCnt*100/TotalProc)))

#echo $TotalProc $ProcCnt $ProcPct

if [ ! -n "$io_thread" ] && [ ! -n "$sql_thread" ];then

msg="实例"$slave_ip":"$slave_port":主从配置为空,请及时查看!"

else

if [ x"$io_thread" == x'Yes' ] && [ x"$sql_thread" == x'Yes' ];then

if [ $slv_delay -gt 10 ];then

msg="实例"$slave_ip":"$slave_port":延迟"$slv_delay"秒"

echo $curtime" "$msg >>$logfile

else

send_flag="replication_ok"

msg="实例"$slave_ip":"$slave_port":replication_ok"

echo $curtime" "$msg >>$logfile

fi

else

msg="实例"$slave_ip":"$slave_port",io_thread或者sql_thread断开,请及时查看"

echo $curtime" "$msg >>$logfile

fi

fi

if [ $ProcPct -gt 75 ] && [ $ProcPct -le 90 ];then

msg="实例"$slave_ip":"$slave_port"连接数百分比达到"$ProcPct"%,请注意!"

echo $curtime" "$msg >>$logfile

elif [ $ProcPct -gt 90 ];then

msg="实例"$slave_ip":"$slave_port"连接数百分比达到"$ProcPct"%,请立即查看!"

echo $curtime" "$msg >>$logfile

else

msg="实例"$slave_ip":"$slave_port"连接数百分比达到"$ProcPct"%,正常"

echo $curtime" "$msg >>$logfile

fi

}

function MasterLoadMon() {

ProcCnt=$(mysql -u$user -p$passwd -h$master_ip -P$master_port -Ne"select count(*                                                                                        ) from information_schema.processlist;")

TotalProc=$(mysql -u$user -p$passwd -h$master_ip -P$master_port -Ne"show variabl                                                                                        es like 'max_connections';" |awk '{print $2}')

ProcPct=$(printf "%d" $((ProcCnt*100/TotalProc)))

if [ $ProcPct -gt 75 ] && [ $ProcPct -le 90 ];then

msg="实例"$master_ip":"$master_port"连接数百分比达到"$ProcPct"%,请注意!"

echo $curtime" "$msg >>$logfile

elif [ $ProcPct -gt 90 ];then

msg="实例"$master_ip":"$master_port"连接数百分比达到"$ProcPct"%,请立即查看!"

echo $curtime" "$msg >>$logfile

else

msg="实例"$master_ip":"$master_port"连接数百分比达到"$ProcPct"%,正常"

echo $curtime" "$msg >>$logfile

fi

}

MasterLoadMon

SlaveCheck

    此脚本最主要的是知道从机状态,比如sql_thread=$(mysql -u$user -p$passwd -h$slave_ip -P$slave_port -e"show slave status\G" |grep Slave_SQL_Running: |awk '{print $2}'),连接到数据库执行命令查看从机状态show slave status\G,找对应的线程Slave_SQL_Running是否正常。

    还有一个参数:Seconds_Behind_Master,官方解释是In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.该值是SQL thread和 I/O thread.之间的差值。relay log中event记录的时间戳是主库上的时间戳,而SQL thread的时间戳是从库上的,所以这个参数的前提是主从机时间一致。

     脚本可以放置在crontab定时任务中,或者可以解决我的文章-Mysql检查脚本控制keepalived(1)  中需要检查同步完成后才操作keepalived完成VIP漂移。

     具体怎么操作呢?连接到数据库执行命令查看主机状态show master status,从机状态show slave status\G,找对应的二进制文件位置对比作为判断条件。

从机二进制位置 主机二进制位置

        但是master故障后就可能读不到主机状态,只能通过slave的状态来判断,不知怎么进一步判断。留待后续解决。

相关文章

  • mysql主从复制监控的脚本

    今天笔者找到一个不错的mysql主从复制监控的脚本,经过测试正常。详情参考文章-Mysql实例连接数和主从复制延迟...

  • MySQL主从复制监控

    Mysql主从复制监控 如何监控主从复制链路的状态,主要是监控 Slava_IO_Running 与 Slave_...

  • MySQL如何配置主从复制,如何修复主从复制出现的异常?

    MySQL如何配置主从复制,如何修复主从复制出现的异常? 一、什么是Mysql主从复制 MySQL主从复制是其最重...

  • zabbix监控配置及调试

    首先编辑一个监控脚本check_mysql.sh,这些参数zabbix mysql template默认的,也可以...

  • Zabbix监控Mysql(percona)

    环境:zabbix 3.0.3 1. Mysql监控账户设置 2. 依赖库安装 因为使用php脚本监控,所以需要安...

  • MySQL-主从复制&读写分离

    零、本文纲要 一、MySQL主从复制 主从复制 主从复制过程 配置主从复制 二、MySQL读写分离 读写分离 Sh...

  • mysql主从复制

    构建MySQL主从复制 MySQL的主从复制和mysql的读写分离两者有着紧密联系,数据的读写分离实在主从复制的基...

  • Mysql 主从复制

    Mysql 主从复制 MySQL Replication 主从复制(也称 AB 复制)允许将来自一个MySQL数据...

  • 主从复制 & MHA

    一,mysql主从复制 (1)场景一(主从复制 _ 全新环境下) (2)场景二(主从复制 _ mysql已经使用一...

  • zabbix应用-监控mysql slave 主从状态

    zabbix监控mysql 主从的状态,写一的脚本,然后设置一个key,创建模板套用这个key 获取mysql 的...

网友评论

      本文标题:mysql主从复制监控的脚本

      本文链接:https://www.haomeiwen.com/subject/lfmguktx.html