[shell] check_slave.sh mysql主从监控复制的脚本

#!/bin/bash
# auth : yoncan@qq.com
# date : 2013-11-05

STATUS_OK=0
STATUS_WARN=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3
export PATH=$PATH:/usr/local/bin:/usr/bin:/bin
_tmp_file=`mktemp /tmp/XXXXXXX`

# ########################################################################
# Set up default args
# ########################################################################
_default_user="ptcheck"
_default_passwd="you_password"
_default_host="127.0.0.1"
_default_port="3306"


# ########################################################################
# Get Help
# ########################################################################
if [ "${1}" = "--help" -o "${#}" = "0" ];
then
    echo "$0 -u <username> -p <password> -h <host> -P <port>"
    exit $STATUS_WARN
fi

# ########################################################################
# Get Options
# ########################################################################
while getopts :u:p:h:P: OPT
do
    case "$OPT" in
        u)
            _user=$OPTARG ;;
        p)
            _pass=$OPTARG ;;
        h)
            _host=$OPTARG ;;
        P)
            _port=$OPTARG ;;
        \?)
            echo 'unknow options' && exit ;;
    esac 
done
_user=${_user:-"$_default_user"}
_pass=${_pass:-"$_default_passwd"}
_host=${_host:-"$_default_host"}
_port=${_port:-"$_default_port"}


# ########################################################################
# Check MySQL Running?
# ########################################################################
_check_mysql_running() {
_run_status=`mysqladmin -u${_user} -p${_pass} -h${_host} -P${_port}  ping 2>/dev/null`
if [ "${_run_status}" != "mysqld is alive" ];then
    echo 'Crit: mysql is not running..'
    exit $STATUS_CRITICAL
fi
}

# ########################################################################
# Get MySQL Running Status
# ########################################################################
_get_slave_status() {
mysql -u${_user} -p${_pass} -h${_host} -P${_port} -e "show slave status\G" >${_tmp_file}
if [ ! -s ${_tmp_file} ];then
    echo "Unknow: get Slave status Unknow"
    exit $STATUS_UNKNOWN
fi
}
# ########################################################################
# Check MySQL Running Status
# ########################################################################
_check_slave_status(){
_slave_status=`awk -F '[ ]+|:' '/Slave.*Running/{printf("%s",$NF)}' $_tmp_file`
if [ "$_slave_status" == "YesYes" ];then
    echo "OK: MySQL Slave Running OK"
    exit $STATUS_OK
elif [ "$_slave_status" == "NoNo" ];then
    echo "Crit: MySQL Slave Not Running"
    exit $STATUS_CRITICAL    
elif [ "$_slave_status" == "YesNo" ];then
    echo "Warn: MySQL slave_sql_thread Not Running"
    exit $STATUS_WARN
elif [ "$_slave_status" == "NoYes" ];then
    echo "Warn: MySQL slave_io_thread Not Running"
    exit $STATUS_WARN
else
    echo "Unknown: MySQL slave status is Unknown"
    exit $STATUS_UNKNOWN
fi
## clear tmp file
rm -f $_tmp_file
}

# ########################################################################
# Main
# ########################################################################

_main(){
_check_mysql_running
_get_slave_status
_check_slave_status
}

_main

 

=====
这是一个监控mysql主从复制的脚本,用于定义到nagios监控所用,定义的形式如下:

# vi commands.cfg

define command{
command_name   check_mysql_slave
command_line   $USER1$/check_slave.sh -h $HOSTADDRESS$
}

OR

define command{ command_name   check_mysql_slave command_line   $USER1$
/check_slave.sh -u ptcheck -p yangcan -h $HOSTADDRESS$ -P $ARG1$ }

 

## 在服务中添加监控 # vi localhost.cfg

define service{
use               general-service
host_name           127.0.0.1
service_description     Server - Mysql Replication
check_command         check_mysql_slave
}

OR

define service{
use               general-service
host_name            127.0.0.1
service_description      Server - Mysql Replication
check_command         check_mysql_slave!3308
}

 

# 下载地址

https://github.com/yoncan/share/blob/master/check_slave.sh

 

posted @ 2013-11-05 17:12  yoncan  阅读(928)  评论(0编辑  收藏  举报