以下脚本可以在任意有mysql客户端的机器执行;检查配置的丛机ip相关的主从同步状态,并将结果返回;返回0为正常;1为异常。可结合邮件报警脚本使用。
脚本参考了其他网络资源,侵删。
#!/bin/bash
#mysql链接端口
PORT='3306'
#mysql用户名
USER='root'
#mysql密码
PASSWORD_MYSQL='Bocom_123'
#丛机ip地址
SLAVE_IP=127.0.0.1
#定义一个绿色输出的函数
function echo_green {
echo -e "\033[32m$1\033[0m"
}
#以上为需要修改的配置信息
DATE=`date +%Y-%m-%d-%H-%M-%S`
echo_green $DATE
#判断是否为root用户
user=$(whoami)
echo $user
if [ "$user" != "root" ];then
echo_green "不是root用户,请切换到root用户执行!"
exit
fi
HOST_IP=$SLAVE_IP
RESULT=1;
check_master_slave_relation(){
#读Slave_IO_Running是否为yes
vIO=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Slave_IO_Running/' | awk -F ":" '{print $2}')
# echo "vIO=$vIO----"
#读Slave_SQL_Running是否为yes
vSQL=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Slave_SQL_Running:/' | awk -F ":" '{print $2}')
# echo "vSQL=$vSQL----"
#读取主从延迟值
vdelay=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Seconds_Behind_Master/' | awk -F ":" '{print $2}')
# echo "vdelay=$vdelay---"
if [ $vIO = "" ];
then
echo_green "the username or password is wrong,or the mysql server is down,so we can not get value"
#表示主从同步错误
return 1
else
#此处不能有空格
if [ $vIO = 'Yes' ];
then
#此处必须有空格
if [ "$vSQL" = ' Yes' ];
then
#判断sql进程是否出现延迟
echo_green "同步时延:$vdelay 秒"
if [ $vdelay != 0 ];
then
if [ $vdelay -ge 60 ];
then
content3="${HOST_IP}: the status of io process and sql process is yes,but slave delayed $vdelay seconds,more than 1 minutes"
echo_green "$content3"
#表示主从同步错误
return 1
else
echo_green "${HOST_IP} the status of io process and sql process is yes,but slave delayed $vdelay seconds,less than 1 minutes"
#表示主从同步正常
return 0
fi
else
echo_green "There is no problem"
#主从同步关系正常
return 0
fi
else
content2=$HOST_IP" Slave_IO_Running status:$vIO,Slave_SQL_Running status:$vSQL,please deal with it as soon as possible!"
#主从同步关系错误
return 1
echo_green "$content2"
fi
else
content1=$HOST_IP" Slave_IO_Running status:$vIO,Slave_SQL_Running status:$vSQL,please deal with it as soon as possible!"
echo_green $content1
#主从同步关系错误
return 1
fi
fi
}
#第一个参数为对应MASTER的IP地址
check_master_slave_relation
RELATION_CHECK_RESULT=$?
MASTER_HOST=$(mysql --host=$HOST_IP --port=$PORT --user=$USER --password=$PASSWORD_MYSQL --connect-expired-password -e "show slave status\G"| awk '/Master_Host:/' | awk -F ":" '{print $2}')
echo_green "检查主从关系失败,请手动修复主从后重试"
#返回检查结果给调用者
return $RELATION_CHECK_RESULT