最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 09:11:41
文档

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

MySQL主从延迟监控脚本(pt-heartbeat): 对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现。pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟。本文主要是通过脚本来定期检查从库与主库
推荐度:
导读MySQL主从延迟监控脚本(pt-heartbeat): 对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现。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、脚本内容

[mysql@SZDB 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://www.gxlcms.com/

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
mailadd=leshami@12306.cn

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、部署参考

[mysql@SZDB run]$ crontab -l

#check slave lag
*/1 * * * * /run/ck_slave_lag.sh 11 3 /log/SlaveLag

文档

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

MySQL主从延迟监控脚本(pt-heartbeat): 对于MySQL数据库主从复制延迟的监控,我们可以借助percona的有力武器pt-heartbeat来实现。pt-heartbeat通过使用时间戳方式在主库上更新特定表,然后在从库上读取被更新的时间戳然后与本地系统时间对比来得出其延迟。本文主要是通过脚本来定期检查从库与主库
推荐度:
标签: 监控 脚本 延迟
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top