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

2023-10-10 21:08

本文主要是介绍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、脚本内容 

[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://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
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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/183097

相关文章

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

MySQL启动报错:InnoDB表空间丢失问题及解决方法

《MySQL启动报错:InnoDB表空间丢失问题及解决方法》在启动MySQL时,遇到了InnoDB:Tablespace5975wasnotfound,该错误表明MySQL在启动过程中无法找到指定的s... 目录mysql 启动报错:InnoDB 表空间丢失问题及解决方法错误分析解决方案1. 启用 inno

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1