如何实时检测mysql主从状态,并做邮件告警?
2018-01-30 11:22
876 查看
实时检测mysql主从状态,并做邮件告警
需求分析:
当我们做完主从后,主从成功的话,Slave_IO_Running和Slave_SQL_Running两个进程的状态就为yes,但是在做主从同步时也不排除,会发生一些意外的情况,所以我们需要写个脚本来实时检测Slave_IO_Running和Slave_SQL_Running的状态,一旦mysql主从状态出现了状况,就通过邮件发送告警,然后再做维护。
脚本思路:
定时检测mysql主从状态,说白的了就是通过脚本让系统去自我检测主从状态,如果是主从状态是正常的,那就不做告警出来,但一旦发生状态异常,就通过发送邮件给运维人员,运维人员收到告警邮件后,然后就做相关的维护处理
1、邮件告警,我直接用的是Python写的脚本做邮件信息发送,你也可以yum装个sendmail包,做信息发送,脚本如下。
2、检测脚本编写
接下来,写个检测主从脚本,按照我们的思路来说,首先是把Slave_IO_Running和Slave_SQL_Running的状态获取,然后利用if语句判断,如果状态为NO就通过Python脚本来发送邮件,严重一点的,如果从服务器的MySQL服务down了,我们也发送邮件告警,把整个过程执行过程,写的时间任务里面,这里我们需要使用函数来实现,这个方便快捷,接下来我详细解析。
3、执行结果
我把slave停掉了,等了几分钟后,已经可以收到邮件了,结果如下:
5、总结
感觉写了个脚本后,发现已经不用每隔一段时刻要自己检测slave的状态了。方便了很多,当然,还有别的方法,也同样可以的做主从复制状态监控。
需求分析:
当我们做完主从后,主从成功的话,Slave_IO_Running和Slave_SQL_Running两个进程的状态就为yes,但是在做主从同步时也不排除,会发生一些意外的情况,所以我们需要写个脚本来实时检测Slave_IO_Running和Slave_SQL_Running的状态,一旦mysql主从状态出现了状况,就通过邮件发送告警,然后再做维护。
脚本思路:
定时检测mysql主从状态,说白的了就是通过脚本让系统去自我检测主从状态,如果是主从状态是正常的,那就不做告警出来,但一旦发生状态异常,就通过发送邮件给运维人员,运维人员收到告警邮件后,然后就做相关的维护处理
1、邮件告警,我直接用的是Python写的脚本做邮件信息发送,你也可以yum装个sendmail包,做信息发送,脚本如下。
[root@mysqlslave ~]# cd /python/send_mail.py #!/usr/bin/python #coding: utf-8 import smtplib import sys from email.mime.text import MIMEText _user = "847536**@qq.com" ##这里填写你的邮件号 _pwd = "ilbsly******" ##这里填写你邮件的密码 ,我这里使用的是qq邮箱(其他邮箱也可以),qq邮箱密码是要到QQ邮箱里面申请的,然后它会生成一个密码的 #_to = "dsf@163.com" ##这里是发送给谁,这个一般注释掉,在执行脚本的时候指定发给谁就可以了 def send_mail(to,subject,contain): msg = MIMEText(contain) msg["Subject"] = subject msg["From"] = _user msg["To"] = to try: s = smtplib.SMTP_SSL("smtp.qq.com", 465) s.login(_user, _pwd) s.sendmail(_user, to, msg.as_string()) s.quit() with open('/tmp/zabbix.log', 'w') as f: f.write("%s\n%s\n%s\n"%(to,subject,contain)) # print "Success!" except smtplib.SMTPException,e: print "Falied,%s"%e if __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
2、检测脚本编写
接下来,写个检测主从脚本,按照我们的思路来说,首先是把Slave_IO_Running和Slave_SQL_Running的状态获取,然后利用if语句判断,如果状态为NO就通过Python脚本来发送邮件,严重一点的,如果从服务器的MySQL服务down了,我们也发送邮件告警,把整个过程执行过程,写的时间任务里面,这里我们需要使用函数来实现,这个方便快捷,接下来我详细解析。
[root@mysqlslave ~]# cd /python/checkslave.sh #!/bin/bash send_mail (){ ##定义一个函数,用来做整合检测MySQL状态内容。 ip=`ifconfig eth0 | sed -n 2p | awk '{print $2}' | cut -d: -f2` ##获取本地的ip,我的本地网卡为eth0,使用sed、awk、cut命令获取IP地址 hostname=`hostname` ##获取本地的主机名 status=(`mysql -uroot -pmichael123456 -e "show slave status\G"|grep "Running" |awk '{print $2}'`) ##通过MySQL命令获取Slave_IO_Running和Slave_SQL_Running的状态,获取出来的结果是(Yes、Yes、slave),因为有三个元素,所以我们可以使用元组来实现 netstat -ntpl | grep 3306 ##查看3306是否存在,用来做检测MySQL的状态 if [ $? -eq 0 ];then ##写一个判断语句如果netstat命令执行成功话,输出$?是0,不存在$?输出结果大于0 if [ "${status[0]}" == "Yes" ] || [ "${status[1]}" == "Yes" ] ;then ##获取元组的第零个元素数和第一个元素,使用if判断,采用并集。 echo "主从复制成功" else ##做个判断 python /python/send_mail.py "847536944@qq.com" "$hostname:$ip-主从复制失败" "$hostname:$ip- Slave_IO_Running 或者 Slave_SQL_Running已经为NO请尽快:做维护处理" ##当输出的元组的结果不为Yes,然后就执行,邮件发送告警$hostname 、$ip为获取的参数 sed -i 's/^*\/10/#&/g' /etc/crontab ##为了防止,它一直在邮件告警,我们需要用sed注释掉,计划任务,这个的作用就是只允许发送故障后, #脚本只执行一次,当然,如果你想发两封的邮件,你也可以添加发送邮件命令两遍。 fi else python /python/send_mail.py "847536944@qq.com" "$hostname:$ip-slave主机mysql服务已经关闭" "$hostname:$ip-主机已经停止运行请尽快做维护" ##netstat输出$?的结果不为0,发送告警。 fi } $1 ##添加函数的参数,让自己决定是否执行该函数 crontab () { cat /etc/crontab | grep "bash $0 send_mail " ##查找是否有计划任务 if [ $? -eq 0 ]; then ##做判断,有就输出有,没有就写入 echo "The port test has been written to the time task" else echo "*/10 * * * * root bash $0 send_mail " >> /etc/crontab ##定义每十分钟,执行一次 fi } crontab
3、执行结果
[root@mysqlslave ~]# bash /python/checkslave.sh #执行第一次,查看不了效果##通过函数来执行,可以发现,已经有效果了,
[root@mysqlslave ~]# bash /python/checkslave.sh send_mail Warning: Using a password on the command line interface can be insecure. tcp 0 0 :::3306 :::* LISTEN 27684/mysqld 主从复制成功 */10 * * * * root bash /python/checkslave.sh send_mail The port test has been written to the time task4、模拟故障
我把slave停掉了,等了几分钟后,已经可以收到邮件了,结果如下:
5、总结
感觉写了个脚本后,发现已经不用每隔一段时刻要自己检测slave的状态了。方便了很多,当然,还有别的方法,也同样可以的做主从复制状态监控。
相关文章推荐
- zabbix自定义监控mysql主从状态,并做邮件告警(详细解说)
- nagios监控mysql主从,并且邮件告警!
- 如何实现实时监控数据库主从同步的状态
- mysql主从数据库状态检测(php)
- 自动判断mysql主从复制状态并邮件通知
- 检测MySQL及MySQL主从的运行状态
- mysql主从状态检测
- mysql主从检测状态命令
- PHP实现的mysql主从数据库状态检测功能示例
- 监控mysql主从状态邮件报警脚本
- linux shell mysql 数据库主从同步状态检查告警
- MySQL主从延迟如何解决
- MySql如何查看连接数和状态
- 如何实时查看mysql当前连接数
- 一个检测MySQL状态的脚本
- 如何检测手机当前为“桌面”(desktop)状态
- shell脚本trap信号和服务器跳板机,mysql自动化脚本,检测主从复制
- 如何实现实时检测用户在线 asp
- zabbix监控mysql主从状态
- C#如何去检测网络的连接状态