自动监控从MySQL同步的脚本

原创
系统 Linux
笔者有不少基于公网类型的网站做的都是MySQL主从架构,从机主要起备份数据库和冷备份的作用,虽然从机宕机了问题不大,但也影响数据的备份工作;这样的网站有数十个,如果一个一个手动的检查,每天都要浪费不少时间,所以设计了一个自动监控从MySQL同步的脚本。此脚本应该能适应各种各样不同的内外网环境。

【51CTO独家特稿】笔者有不少基于公网类型的网站(没有硬件防火墙,直接置于IDC机房)做的都是MySQL主从架构,从机主要起备份数据库和冷备份的作用,虽然从机宕机了问题不大,但也影响数据的备份工作;这样的网站有数十个,如果一个一个手动的检查,每天都要浪费不少时间,所以设计了一个自动监控从MySQL同步的脚本。

脚本设计思路:

1、此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境;

2、让脚本也顺便监控下MySQL是否正常运行;

3、Slave机器的IO和SQL状态都必须为YES,缺一不可,这里用到了多重条件判断-a。

脚本内容:

#crontab time 00:10
#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
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"`

if [ "$MYSQLPORT" == "3306" ]
then
  echo "mysql is running"
else
  echo $MYSQLIP mysql is down" | mail -s "warn!server: $MYSQLIP mysql is down" 1309889xxxx@wo.com.cn
fi

if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
  echo "Slave is running!"
else
echo "Slave is not running!" | mail -s "warn! $DATA $MYSQLIP MySQL Slave is not running" 1309889xxxx@163.com
fi

上面是最终版本,增加了DATA参数,可以准确定位是哪一个时间点MySQL主从出现了问题。大家可以比较一下与之前***个版本有什么不同:

#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
STATUS=$(/usr/local/webserver/mysql/bin/mysql -u yuhongchun -pyuhongchun101 -S /tmp/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}'`

if [ "$MYSQLPORT" == "3306" ]
then
  echo "mysql is running"
else
  mail -s "warn!server: $MYSQLIP mysql is down" yuhongchun027@163.com
fi

if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
  echo "Slave is running!"
else
  echo "#######  $date  #########">> /data/data/check_mysql_slave.log
  echo "Slave is not running!" >> /data/data/check_mysql_slave.log
  mail -s "warn! $MySQLIP_replicate_error" yuhongchun027@163.com << /data/data/check_mysql_slave.log
fi

使用方式:

用crontab设置定期运行,建议每十分钟运行一次

*/10 * * * * root /bin/sh /root/mysql_slave.sh 

记得在每台MySQL从机上分配一个yuhongchun的用户,权限大些也没关系,只限定在本地运行,如下所示:

grant all privileges on *.* to "yuhongchun"@"127.0.0.1" identified by "yuhongchun101";
grant all privileges on *.* to "yuhongchun"@"localhost" identified by "yuhongchun101";

后期应用:

后期公司的MySQL数据库准备由一主一从架色升级成一主多从,读写分离的架构,LVS作从数据库的负载均衡器,此脚本自动监控从MySQL的replication状态,如果不能同步则自动关闭本机的MySQL服务,免得影响整个网站的正常业务访问。当然了,到时脚本的运行周期肯定也需要更改,由10分钟变成秒级的,这个可以通过while循环来实现

大家如果考虑用手机邮的话,有些事情也请注意一下:

一、Linux服务器本身就有sendmail服务的,它发送邮件的功能的效果就不错,没必要再经过公司的邮箱服务器中转;

二、联通虽然可以和邮箱绑定并设置邮件到达发送警报,但发现联通的号延迟问题、到达问题还是很多,建议大家还是以移动的号为主;

三、这种报警策略只是作为辅助而已。 

【51CTO.com独家特稿,转载请注明原文作者和出处。】

【编辑推荐】

  1. CentOS上Cacti配置监控mysql
  2. MySQL数据库入门与精通教程
  3. MySQL平台数据库备份方案详细说明
责任编辑:yangsai 来源: 51CTO.com
相关推荐

2011-06-20 09:52:56

MySQL

2023-05-11 08:46:28

MySQL

2014-05-21 14:37:27

Zabbix监控MySQL

2022-06-09 08:07:15

Shell脚本Linux

2020-04-01 15:11:36

Shell命令Linux

2011-08-25 09:33:25

MySQL运维

2011-03-24 10:59:10

Nagios监控mysql

2009-07-20 15:42:34

监控JRubyJProfiler

2010-10-13 09:45:50

Linux监控脚本

2013-09-04 09:59:49

监控 Shell 脚本

2017-06-29 09:28:37

OracleMariaDB复制

2013-08-30 10:25:22

Shell主机监控

2011-03-29 11:20:36

Cacti模板MySQL stats

2017-01-18 10:57:24

MySQLZabbix监控

2017-07-10 14:20:45

2020-09-24 08:45:10

React架构源码

2023-08-29 07:22:06

MySQL数据工具故障恢复

2010-05-31 14:32:44

SVN自动同步

2010-05-17 14:00:07

MySql数据库

2013-08-19 12:46:27

点赞
收藏

51CTO技术栈公众号