代码如下:
- #!/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 -p11111 -S /var/lib/mysql/mysql.sock -e "show slave statusG" | 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 -p11111 --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." admin@yourdomain.com < /var/log/mysqlerr
- else
- echo "mysql is running..."
- fi
- else
- mail -s "WARN!Server: $MYSQLIP mysql is down." admin@yourdomain.com
- fi
- }
- checkMysqlStatus
- if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
- then
- echo "MySQL Slave is running!"
- else
- echo "####### $DATA #########">> /data/mysql/mysql_slave_status.log
- echo "MySQL Slave is not running!" >> /data/mysql/mysql_slave_status.log
- echo "MySQL Slave is not running!" | mail -s "WARN! $MYSQLIP MySQL Slave is not running." admin@yourdomain.com
- fi
建议每十分钟运行一次
*/10 * * * * root /bin/sh /root/mysql_slave_status.sh
原理:
1)监控MYSQL的运行状态;
2)Slave机器的IO和SQL状态都必须为YES,缺一不可;
注意,请结合自身的实际环境使用。