#!/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 statusG" >${_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 }
# 下载地址