mysql 自动检测主从同步状态的一个小脚本

Slave机器的IO和SQL状态都必须为YES,才是同步状态;

#!/bin/bash 
#Check MySQL Slave's Runnning Status
#Crontab time 00:10

MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $5}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
STATUS=$(/usr/bin/mysql -uroot -p123qwe -S /var/lib/mysql/mysql.sock -e "show slave status\G" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk  ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk  '{print $2}'`
DATA=`date +"%y-%m-%d %H:%M:%S"`

function checkMysqlStatus(){
	if [ "$MYSQLPORT" == "3306" ]
	then
		/usr/bin/mysql -uroot -p123qwe --connect_timeout=5 -e "show databases;" &>/dev/null 2>&1
		if [ $? -ne 0 ]
		then
			echo "Server: $MYSQLIP mysql is down, please try to restart mysql by manual!" > /var/log/mysqlerr
            mail -s "WARN! server: $MYSQLIP  mysql is down." xxxx@126.com < /var/log/mysqlerr
		else
			echo "mysql is running..."
		fi
	else
		mail -s "WARN!Server: $MYSQLIP mysql is down." mailcity@126.com
	fi
}
 
checkMysqlStatus

if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
  echo "MySQL Slave is running!"
else
  echo "####### $DATA #########">> /var/log/mysql/mysql_slave_status.log
  echo "MySQL Slave is not running!" >>    /var/log/mysql/mysql_slave_status.log
  echo "MySQL Slave is not running!" | mail -s "WARN! $MYSQLIP MySQL Slave is not running." xxxx@126.com
fi

发表评论