自动监控主从MySQL同步的SHELL脚本
2023-09-14 08:58:32 时间
代码如下:
- #!/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
建议每十分钟运行一次
*/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";
脚本设计思路:
1、此脚本应该能适应各种各样不同的内外网环境,即IP不同的环境;
2、让脚本也顺便监控下MySQL是否正常运行;
3、Slave机器的IO和SQL状态都必须为YES,缺一不可,这里用到了多重条件判断-a。
脚本产生的背景环境:
我有不少基于公网类型的网站(没有硬件防火墙,直接置于IDC机房)做的都是MySQL主从架构,从机主要起备份数据库和冷备份的作用,虽然从机宕机了问题不大,但也影响数据的备份工作;这样的网站有数十个,如果一个一个手动的检查,每天都要浪费不少时间,所以玩了下脚本控,设计了如上脚本。
脚本实践:
此脚本我已用于了生产环境,大家可以放在我们的从MySQL机器上,用来监控;另外建议有时也手动检查下,有次发现rsync --delete 自动删除了/data/data里面的数据,即从数据库的位置,脚本没有报警。
后期应用:
后期公司的MySQL数据库准备由一主一从架色升级成一主多从,读写分离的架构,LVS作从数据库的负载均衡器,此脚本自动监控从MySQL的replication状态,如果不能同步则自动关闭本机的MySQL服务,免得影响整个网站的正常业务访问。当然了,到时脚本的运行周期肯定也需要更改,由10分钟变成秒级的,这个可以通过while循环来实现。
相关文章
- 【MySQL数据同步:怎样提高速度】(mysql同步慢)
- 使用Golang快速连接MySQL数据库(golang连接mysql)
- MySQL实现数据表同步技术(mysql同步数据表)
- MySQL数据库同步:一步到位(mysql同步数据库)
- Node.js连接MySQL数据库实践(node连接mysql)
- MySQL监控:最佳管理指令(mysql监控命令)
- MySQL备份技巧及恢复方式(mysql备份方式)
- MySQL中使用IN排序查询记录(mysql按in排序)
- MySQL实时数据同步:提升实时性能(mysql实时数据同步)
- MySQL双主复制:数据同步的原理与实现(mysql双主复制原理)
- MySQL主从同步的最佳实践:清除主从数据同步异常。(mysql清除主从)
- 保障数据安全,实时监控MySQL——天兔监控MySQL系统解析(天兔监控mysql)
- 如何使用MySQL表合并数据?(mysql表合并数据)
- 给MySQL表添加UUID列(mysql 表uuid)
- 深入浅出:MySQL服务注册简明教程(mysql 服务 注册)
- MySQL参数详解,让你更加了解Mysql参数定义及优化。(mysql参数定义)
- MySQL 停止同步:一场搏斗(mysql 停止 同步)
- MySQL如何快速安全读取时间数据(c mysql 读取时间)
- Windows下cmd快速运行MySQL设置密码(cmd运行mysql密码)
- 基于Ads同步到MySQL的解决方案(ads同步到mysql)
- MySQL高可用架构实现三主三从同步备份技术(mysql三主三从)
- MySQL极少用的索引及其使用场景(mysql不常见索引)