Shell监控MySQL从机状态

监控MySQL从机状态并发送邮件提醒
本文介绍了一个用于监控MySQL从机状态并发送邮件提醒的脚本,使用sendEmail替代系统自带的mail命令,避免邮件被误判为垃圾邮件的问题。脚本通过检查IOthread和SQLthread来监控主从同步状态,包括主从同步是否正常、复制延迟情况等,以确保数据库运行稳定。

    Shell监控MySQL从机状态这种脚本已经很多了,而且实现起来也很简单,但是比较多人使用的是系统自带的mail命令,但是mail有很多不足的地方,例如我发送邮件很多邮箱会认为是垃圾邮件,而通知不到我,这就是很糟糕的问题了,所以这里的发送邮件我们选用sendEmail,sendEmail其实都不需要安装,解压即可使用:

[root@node1 ]# wget  
[root@node1 ]# tar xvf sendEmail-v1.56.tar.gz -C /usr/local/
[root@node1 ]# cd /usr/local/ ; mv sendEmail-v1.56 sendEmail

    脚本脚本内容:

#!/bin/bash
#set mysql evn
MYSQL_USER_SLAVE=
MYSQL_PASS_SLAVE=
MYSQL_HOST_SLAVE=
MYSQL_PORT_SLAVE=3306
DATE=`date +%Y%m%d%H%M%S`
tmpfile_status="pstatus_$DATE"
# 获取SLAVE状态信息
mysql -h${MYSQL_HOST_SLAVE} -u${MYSQL_USER_SLAVE} -p${MYSQL_PASS_SLAVE} -P${MYSQL_PORT_SLAVE} -e "SHOW SLAVE STATUS\G" >${tmpfile_status} 2>/dev/null
# 邮件列表,需要发送多个地址,请用空格隔开
Email_To_Addr="v11020@qq.com"
Email_From_Addr=v11020@qq.com
Email_Passwd=password
# 发送邮件
function sendEmail(){
for i in $Email_To_Addr
do
/usr/local/sendEmail/sendEmail -f "$Email_From_Addr" -t "$i" -o message-charset=utf8 -s smtp.exmail.qq.com -u "$Message" -xu "$Email_From_Addr" -xp "$Email_Passwd" -m "$Body "
done
}
# 检查主从同步是否正常
SIR_Status=`awk '/\<Slave_IO_Running\>/{print $2}' ${tmpfile_status}`
SSR_Status=`awk '/\<Slave_SQL_Running\>/{print $2}' ${tmpfile_status}`
if [ "$SIR_Status" != "Yes" -o "$SSR_Status" != "Yes" ];then
    Message="Rep sync failure."
    Body="IP:$MYSQL_HOST_SLAVE"
    sendEmail
fi
# 检查是否存在复制延迟
MLF_Num=`awk -F. '/\<Master_Log_File\>/{print $NF}' ${tmpfile_status}`
RSLF_Num=`awk -F. '/\<Relay_Master_Log_File\>/{print $NF}' ${tmpfile_status}`
if [ "$MLF_Num" = "$RSLF_Num" ];then
    RMLP_Num=`awk '/\<Read_Master_Log_Pos\>/{print $NF}' ${tmpfile_status}`
    ESLP_Num=`awk '/\<Exec_Master_Log_Pos\>/{print $NF}' ${tmpfile_status}`
    SBM_Num=`awk '/\<Seconds_Behind_Master\>/{print $2}' ${tmpfile_status}`
    Diff_Num=$[RMLP_Num-ESLP_Num]
    if [ "$RMLP_Num" -gt "$ESLP_Num" -a "$SBM_Num" -gt 0 ];then
        Message="SAP event slowly"
        Body="backward master:$Diff_Num events,IP:$MYSQL_HOST_SLAVE"
        sendEmail
    fi
else
    Message="binlog question"
    Body="slave's Master_Log_File and Relay_Master_Log_File different,IP:$MYSQL_HOST_SLAVE"
    sendEmail
fi
rm -rf ${tmpfile_status}

    脚本通过检查IO thread和SQL thread去监控主从同步是否正常,并且加上了延迟复制的检查。

    这里脚本内容从生产环境拿下来删掉一下变量和裁剪了一些内容之后没测试过,发现问题可以留言或者邮件和我交流。

    声明:这章内容仅提供参考作用,不承担任何法律责任。


转载于:https://my.oschina.net/ldhqy/blog/475205

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值