简介
当搭建完成mysql的主从复制后,有时可能会遇到同步失败的问题。有时需要手动进行干预,但如果长时间没有同步可能就会需要在slave数据库中重新导入master的数据,然后重新进行数据同步,这是非常繁琐而且影响业务可用性的操作。
所以对于Mysql主从同步的状态的监控变得较为重要,如果能够及时发现同步故障并及时处理能够减少对于业务系统的影响,以及后续大量麻烦的操作。
此文通过shell脚本编写nagios插件,对于mysql的主从状态进行监控。
环境介绍
mysql-slave: 192.168.1.80
nagios服务器: 192.168.1.199
第一步:Slave数据库帐号创建
1.登录Slave数据库:
mysql -h 192.168.1.80 -uroot -p
2.新建监控用户:
mysql>GRANTREPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'newslave'@'192.168.1.199'IDENTIFIED “password”;
mysql>FLUSH PRIVILEGES;
第二步:部署nagios监控脚本
1.将脚本放至到/usr/local/nagios/libexec/check_mysqlslave.sh,并添加执行权限chmod a+x /usr/local/nagios/libexec/check_mysqlslave.sh
2.脚本内容:
执行脚本前先确认nagios服务器上是否已经安装了mysql的客户端,如果执行mysql命令发现command not found.请先执行yum install mysql -y安装mysql客户端连接工具。
/usr/local/nagios/libexec/check_mysqlslave.sh
#!/bin/bash
USAGE="`basename $0` [-H]<hostname> [-P]<port>[-u]<username> [-p]<password>";
critical=""
warning=""
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
#status_string=Threads_connected
# print usage
if [[ $# -lt 4 ]]
then
echo ""
echo "Wrong Syntax: `basename $0` $*"
echo ""
echo "Usage: $USAGE"
echo ""
exit 0
fi
# read input
while [[ $# -gt 0 ]]
do
case "$1" in
-H|--hostname)
shift
hostname=$1
;;
-P|--port)
shift
port=$1
;;
-u|--user)
shift
user=$1
;;
-p|--password)
shift
password=$1
esac
shift
done
value=$(mysql -h $hostname -P $port -u $user -e "show slavestatus\G;" -p$password|grep \ "Slave_SQL_Running"|awk '{print$2}');
if [[ "$value" != "Yes" ]]
then
status=$(mysql -h $hostname -P $port -u $user -e "show slavestatus\G;" -p$password|grep \ "Last_SQL_Error"|awk '{print$2}');
echo "CRITICAL - $status"
exit 2
fi
if [[ "$value" == "Yes" ]]
then
echo "OK - $value"
exit 0
fi
3.脚本执行说明:
[root@nagios ~]# bash/usr/local/nagios/libexec/check_mysqlslave.sh
Wrong Syntax: check_mysqlslave.sh
Usage: check_mysqlslave.sh[-H]<hostname> [-P]<port> [-u]<username> [-p]<password>
-H 为数据库的ip地址 -P为MYSQL监听端口 -u为数据库用户名-p为数据库密码
4.执行测试:
[root@nagios ~]#check_mysqlslave.sh -H 192.168.1.80 -P 3306 -u slave -p "password"
OK - Yes
执行结果根据在slave数据库中执行show slave status\G;中的Slave_SQL_Running状态而来,如果此字段结果不为“Yes”,则会进行报警。且会输出Last_SQL_Error的状态。
第三步:将脚本部署至nagios进行监控
1.修改commands.cfg
在commands.cfg添加如下代码:
define command{
command_name check_mysqlslave
command_line /usr/local/nagios/libexec/check_mysqlslave.sh $ARG1$
}
2.修改localhost.cfg
在localhost.cfg(当然也可以在你指定的所需监控服务器内添加服务监控项目)添加如下代码:
define service{
use generic-service
host_name mysql-slave
service_description CHECK_MYSQLREPLICATION
check_command check_mysqlslave! -H 192.168.1.199 -P 3306 -u newslave -p"password"
}
感叹号后为被监控数据库的相关信息。
3.验证
重启nagios后即可在nagios的web上查看到新添加的监控项目。
文章来自于: http://learn-learn.top/archives/21.html
本文介绍如何使用Shell脚本实现MySQL主从状态监控,通过Nagios插件及时发现并处理同步故障,减少业务影响。
158

被折叠的 条评论
为什么被折叠?



