MySQL 主从延迟监控脚本(pt-heartbeat)

对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现。pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟。本文主要是通过脚本来定期检查从库与主库复制的延迟度并发送邮件,供大家参考。

有关pt-heartbeat工具的安装可以参考:percona-toolkit的安装及简介    有关pt-heartbeat工具的介绍可以参考:使用pt-heartbeat监控主从复制延迟

1、脚本概述
   a、脚本定期使用--check方式单次检查当前的延迟性(定期的方式可以使用cron job比如每1分钟或5分钟)
   b、通过设定指定的延迟阀值来判断当时的延迟性是否在可控范围
   c、一旦当前的延迟大于指定阀值,则马上使用--monitor方式不停的监控其延迟性并写入到日志文件
   d、对于--monitor方式,其进程运行超过30分钟,自kill其进程,以避免无限期运行导致日志过大,空间不够用

2、脚本内容

[[email protected] run]$ more ck_slave_lag.sh
#!/bin/bash
#set -x
if [ $# -ne 3 ];then
      echo "usage:"
      echo "ck_slave_lag.sh <Servier-id> <MaxLag> <LogDir>"
      exit 0;
fi

# Author : Leshami
# Blog   : http://blog.csdn.net/leshami

ServerID=$1
MaxLag=$2
LogDir=$3
Timestamp=`date +%Y%m%d_%H%M%S`
Rentition=7
LogFile=$LogDir/slave_lag_$Timestamp.log
LagDetail=$LogDir/slave_lag_Detail_$Timestamp.log
[email protected]

echo $ServerID
echo $MaxLag
echo $LogDir
echo $LogFile
echo $LagDetail
echo $mailadd

if [ ! -d $LogDir ];then
    mkdir -p $LogDir
fi

Lag=`/usr/bin/pt-heartbeat --user=monitor --password=xxx -S /tmp/mysql.sock -D test --master-server-id=$ServerID --check`
Lag=`echo ${Lag%.*}`
#Lag=3
echo $Lag
ptStatus=`ps -ef|grep pt-heart|grep daemonize`
echo $ptStatus

if [ $Lag -gt $MaxLag ]; then
    echo "The current date is `date` at `hostname`."          >>$LogFile
    echo "The current lag log file is $LogFile."              >>$LogFile
    echo "The current replication lag is $Lag."               >>$LogFile
    echo "The replication lag is larger than max lag $MaxLag." >>$LogFile

    if [ -z "$ptStatus" ] ; then
        echo "Start a monitor daemon with below command: "        >>$LogFile
        echo "pt-heartbeat --user=monitor --password=xxx -S /tmp/mysql.sock -D test " >>$LogFile
        echo " --master-server-id=11 --monitor --print-master-server-id --daemonize --log=$LagDetail" >>$LogFile
        /usr/bin/pt-heartbeat --user=monitor --password=xxx -S /tmp/mysql.sock -D test         --master-server-id=$ServerID --monitor --print-master-server-id --daemonize --log=$LagDetail
        echo "More detail please check lag log from $LagDetail." >>$LogFile
        cat $LogFile | mutt -s "Found slave lag on `hostname`." $mailadd
    fi
fi

if [ -n "$ptStatus" ] ; then
    STime=`ps -ef|grep pt-heart|grep daemonize |gawk ‘{print $5}‘`
    Pid=`ps -ef|grep pt-heart|grep daemonize |gawk ‘{print $2}‘`
    STime=`date ‘+%Y%m%d‘`" "$STime
    s_STime=`date -d "$STime" ‘+%s‘`
    s_ETime=`date +%s`
    DiffSec=`expr $s_ETime - $s_STime`

    echo $STime
    echo $s_STime
    echo $s_ETime
    echo $DiffSec

    if [ "$DiffSec" -gt 1800 ]; then
       echo "kill -9 $Pid"
       kill -9 $Pid
    fi
fi

# Remove history slave lag log.
find $LogDir -name "*slave_lag*" -ctime +$Rentition -delete
exit

3、部署参考

[[email protected] run]$ crontab -l

#check slave lag
*/1 * * * * /run/ck_slave_lag.sh 11 3 /log/SlaveLag
时间: 2024-10-11 12:08:03

MySQL 主从延迟监控脚本(pt-heartbeat)的相关文章

mysql主从同步监控脚本

mysql主从同步监控脚本,利用mysql从库中的IO和SQL进程以及延迟时间来监控主从同步是否正常,详细shell脚本如下: #!/bin/bash #author wangning #date 2017-7-17 #qq 1198143315 #Email [email protected] ################################## define variable############################# define_variable(){ ip

Mysql主从状态监控脚本

目标:对Mysql从库进行状态监控,如果从库复制异常就告警 思路: 1.首先查找Mysql从库的4个参数值(show slave status根据这个命令):分别是从库的IO线程.SQL线程.复制延迟时间(这个在以下脚本没用到,可以再写个脚本对其延迟进行告警).错误码 2.函数Mysql_status判断,对IO线程.SQL线程.错误码三者逻辑与判断 3.如果为假则执行函数Mysql_Errno 4.对于mysql错误码为1158 1159 1008 1007 1062 我们可以进行停止slav

mysql复制延迟监控脚本

#!/bin/sh #[email protected] #repdelay.sh #查看复制延迟具体多少event #####1.juede the rep slave status export black='\033[0m' export boldblack='\033[1;0m' export red='\033[31m' export boldred='\033[1;31m' export green='\033[32m' export boldgreen='\033[1;32m' e

mysql主从状态监控脚本报警脚本

#!/bin/bash MYSQLPORT=`netstat -antlp |grep "LISTEN" ` |grep "3306" |awk -F[:""]+  '{print $4}' MYSQLIP = `ifconfig eth0` |grep "inet addr" |awk -F[:""]+ '{print $4}' STATUS = $(/usr/local/mysql/bin/mysql

MySQL主从延迟复制实践及生产故障案例恢复实践

1.1 MySQL主从延迟复制介绍 从MySQL5.6开始支持了主从延迟复制,这个功能主要解决的问题是,当主库有逻辑的数据删除或错误更新后,所有的从库都会进行错误的更新,从而导致所有的数据库数据异常,即使有定时的备份数据可以用于数据恢复,特别是数据库数据量很大时,恢复时间会很长,再恢复期间数据库数据被删或错误数据影响正常的访问体验. 而延迟复制就可以较好的解决这个问题.例如,可以设定某一个从库和主库的更新延迟1小时,这样主库数据出问题以后,1个小时以内发现,可以对这个从库进行无害恢复处理,使之依

实时刷新缓存-处理mysql主从延迟的一些设计方案

概要: 在项目开发当中,经常有这样一种场景,对数据库进行添加.修改.删除操作的应用直接连接master库,只对数据库进行查询的应用,会先建立一个中央缓 存,例如redis或者memcache,如果缓存没有命中,那么直接访问slave库.下文会介绍一下在刷新中央缓存时,如果发生主从延迟,应该如何处 理.也即是,当应用System-A 把数据库写入master库的时候,System-B应用在读取slave库的时候,master库的数据还没同步到slave库,如果这个时候刷新缓存 的话,会直接把旧的数

window 平台下mysql主从的监控(window执行计划配合vb脚本)

(1)在window上安装ODBC(vb链接MySQL的驱动程序) 下载地址为:http://dev.mysql.com/downloads/connector/odbc/ 根据window系统选择相应版本即可. 我安装的是mysql-connector-odbc-5.3.4 如果在安装mysql-connector-odbc-5.3.4报错了, Error 1918.Error installing ODBC driver Mysql ODBC 5.3 ANSI Driver,ODBC err

mysql主从一致性校验工具-pt

一.环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 MasterIP master 数据库:主 177  centos6.7 SlaveIP slave 数据库:从 148 2.软件环境 软件 版本 安装方式 说明 pt工具 3.0.4 编译安装 这是一个综合工具包,包含很多pt命令 mysql数据库 5.6.37 yum安装 主从环境 3.需要用到库 库名 表名 用途  percona checksums 存储pt命令监测的结果,第一次执行检测命令时会自己

MySQL 主从延迟几万秒 Queueing master event to the relay log(转)

数据库版本Server version:    5.6.24-log Source distribution 问题描述 数据采集平台业务数据库由于批量灌数据导致主从延迟上万秒. 复制线程长期处于Queueing master event to the relay log状态. 监控数据显示1.Seconds_Behind_Master 维持在6w秒左右,且有上升趋势.2.主库有大量的binlog积压无法同步到从库,但主从库的网卡流量都很低远未达到瓶颈.3.从库的qps与tps很低,维持在几百左右