实时检测mysql主从状态,并做邮件告警

需求分析:

当我们做完主从后,主从成功的话,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 task

4、模拟故障

我把slave停掉了,等了几分钟后,已经可以收到邮件了,结果如下:

5、总结

感觉写了个脚本后,发现已经不用每隔一段时刻要自己检测slave的状态了。方便了很多,当然,还有别的方法,也同样可以的做主从复制状态监控。

如何监测mysql主从复制状态_如何实时检测mysql主从状态,并做邮件告警?相关推荐

  1. mysql 查看连接_怎么实时查看mysql当前连接数

    如何实时查看mysql当前连接数? 1.查看当前所有连接的详细资料: ./mysqladmin -uadmin -p -h10.140.1.1 processlist 2.只查看当前连接数(Threa ...

  2. 怎样查看mysql连接池_如何实时查看mysql当前连接数?

    一.命令mysqladmin 1.查看当前所有连接的详细: mysqladmin -uroot -p -h127.0.0.1 processlist 2.只查看当前连接数(Threads就是连接数.) ...

  3. mysql主从复制安装部署配置操作步骤及主从库宕机处理办法

    mysql主从复制安装部署配置操作步骤及主从库宕机处理办法 大家好,我是酷酷的韩~ 1.前期准备 (1)首先需要准备至少两台mysql 这里方便演示,用了两台虚拟机 环境是centos7 主: 172 ...

  4. mysql 主从复制 监控_监控MySQL主从复制状态的脚本

    思路是通过show slave status这条命令来查看主从复制的状态,然后根据状态字段的值进行判断. show slave status\G; #显示slave状态; slave_IO_Runni ...

  5. doctor mysql数据导入_线上环境mysql主从同步的搭建过程

    之前搭建过一套主从同步的mysql集群,但是是基于新数据库,而这次线上环境要升级成主从同步的集群,记录一下升级过程和中间遇到的各种问题. 由于是直接对线上数据库进行修改,因此要保证对线上环境造成尽量小 ...

  6. mysql级联删除_近百道MySQL面试题和答案(2020收藏版)(完结篇)

    7. 什么是死锁?怎么解决? 死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象. 常见的解决死锁的方法 1.如果不同程序会并发存取多个表,尽量约定以相同的顺序访 ...

  7. mysql主从复制实验(附编译安装mysql脚本)

    mysql主从复制 原理 环境准备 实验步骤 原理 1.当我们的数据库主服务器发生了写操作数据发生了变化时,二进制日志就会记录,然后主服务器主动通知从服务器过来拿二进制日志,此时,Slave服务器的I ...

  8. mysql架构组成_第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

  9. mysql 可视化监控_基于Prometheus构建MySQL可视化监控平台

    对于MySQL的监控平台,相信大家实现起来有很多了:基于天兔的监控,还有基于zabbix相关的二次开发.相信很多同行都应该已经开始玩起来了.我这边的选型是prometheus + granafa的实现 ...

最新文章

  1. CSS盒模型( CSS margin 属性)
  2. WEB前后端分离开发中的验证与安全问题
  3. Eclipse与MyEclipse增强代码提示
  4. trietree的一个小练习
  5. Go语言学习资料整理
  6. 笔记本电脑如何保养_电脑保养只是吹一吹?别再被骗了,电脑没做这些就等于没保养...
  7. java离职交接文档_定了!财会人离职不办这2项交接,要承担法律责任!后果非常严重...
  8. 在国企工作30年,单位现在协商买断工龄,3000/年该走吗?
  9. 明天发布一个基于Silverlight的类Visio小型绘图工具项目。
  10. 必备iOS设备解锁工具:iToolab UnlockGo for Mac(4.1.4中文)
  11. 1.1计算机解决问题的过程教案,1.1 计算机解决问题的过程
  12. plot函数--R语言
  13. Arduino Web Editor网页编辑器入门
  14. Smart210学习记录-------内存初始化
  15. 2023 闲鱼扫码自动收货跳转支付宝HTML源码
  16. QQ小游戏接入问题:Uncaught TypeError: wx.saveFile is not a function
  17. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十一章:环境光遮蔽(AMBIENT OCCLUSION)
  18. chrome设置android,在Android上从Chrome上打开位置设置活动
  19. chrome插件 Proxy Switchy Auto 使用教程
  20. java基本数据类型 string,String是基本的数据类型吗?

热门文章

  1. 万物新生招股书:每股发行价格区间为13-15美元
  2. 39岁程序员住进养老院,早6晚9的作息,网友羡慕哭了
  3. 京东健康暗盘涨幅超27% 成交额超1.6亿港元
  4. 疑似小米11 Pro保护壳曝光:横向矩阵相机设计
  5. 爆料者称苹果仍在继续研发iPhone屏下Touch ID
  6. iPhone 12系列起售价又要涨了?128GB起步...
  7. 特斯拉Model X成NASA官方宇航员转运车辆,已打上NASA标志
  8. 5G人才平均月薪水涨船高!通信研发工程师需求最旺
  9. 宁德时代811电芯初现真容 搭配宝马X1混动汽车能量密度提升近6成
  10. 商业互吹?扎克伯格:后悔没早点学微信