Shell监控MySQL从机状态

    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="[email protected]"
[email protected]
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去监控主从同步是否正常,并且加上了延迟复制的检查。

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

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


你可能感兴趣的:(Shell监控MySQL从机状态)