自动监控主从MySQL同步的SHELL脚本-阿里云开发者社区

开发者社区> 余二五> 正文

自动监控主从MySQL同步的SHELL脚本

简介:
+关注继续查看

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/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}'`
DATA=`date +"%y-%m-%d %H:%M:%S"`
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 "####### $DATA #########">> /data/data/check_mysql_slave.log
  echo "Slave is not running!" >>    /data/data/check_mysql_slave.log
  echo "Slave is not running!" | mail -s "warn! $MYSQLIP MySQL Slave is not running" yuhongchun027@163.com
fi

建议每十分钟运行一次

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

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

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

脚本设计思路:

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

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

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

脚本产生的背景环境:

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

脚本实践:

此脚本我已用于了生产环境,大家可以放在我们的从MySQL机器上,用来监控;另外建议有时也手动检查下,有次发现rsync --delete 自动删除了/data/data里面的数据,即从数据库的位置,脚本没有报警。

后期应用:

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





本文转自 抚琴煮酒 51CTO博客,原文链接:http://blog.51cto.com/yuhongchun/666019,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RocketMQ进阶-延时消息
在开发中经常会遇到延时任务的需求,例如在12306购买车票,若生成订单30分钟未支付则自动取消;还有在线商城完成订单后48小时不评价 ,自动5星好评。像这类在某事件触发后一段时间内执行的需求任务我们称之为 延时任务。
7 0
大厂都这么使用MySQL8进行条件查询(中)
大厂都这么使用MySQL8进行条件查询(中)
4 0
大厂都这么使用MySQL8进行条件查询(上)
大厂都这么使用MySQL8进行条件查询(上)
4 0
MYSQL 中 LIMIT 用法
MYSQL 中 LIMIT 用法
3 0
使用阿里云ESC部署Spring Boot项目
在阿里云服务器中安装docker,部署springboot应用。
5 0
JDK1.9 新特性(最全)
JDK1.9 新特性(最全)
3 0
大学毕业年的找工作和学习总结
大学毕业年的找工作和学习总结
5 0
大厂都这么使用MySQL8进行条件查询(下)
大厂都这么使用MySQL8进行条件查询(下)
3 0
架构师不得不了解的理论知识 -- 基础设施架构
任何一个系统按照逻辑部署维度都可以划分成应用层与基础设施层
5 0
一条查询SQL的执行过程
我们今天以MYSQL为例,揭示一下MySQL数据库的查询过程,并让大家对数据库里的一些零件有所了解。
4 0
+关注
13347
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载