博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监控MySQL数据库的主从状态的shell脚本
阅读量:6303 次
发布时间:2019-06-22

本文共 2265 字,大约阅读时间需要 7 分钟。

本脚本来自有学习阿铭的博文学习:

在大数的互联网公司,其数据库都使用开源的MySQL,其架构也是主从为主,所以监控数据库主从同步情况尤为重要。
提示:本文中的S全部都$符,不要问为什么,马云爸爸的社区就这样。

#!/bin/bash#用途:监控MySQL数据库的主从状态的shell的脚本。#作者:Caron maktini#日期:2018年11月19日#版本:v0.1#要求如下:每分钟检测一次主从连接状况,未连接则不再执行;不同步情况发生后将向预留邮箱报警;在没有解决情况下,需要每隔30分钟发一次告警邮件。#把脚本名字存入变量s_names_name=`echo $0 | awk -F '/' '{print $NF}'`Mysql_c="mysql -uroot -p密码"#该函数实现邮件告警收敛m_mail(){    log=$1    t_s=`date +%s`    t_s2=`date -d " 1 hours ago" +%s`    if  [ ! -f /tmp/$log ]    then        #创建$log文件        touch  /tmp/$log        #增加a权限。只允许追加内容,不允许更改或者删除        chattr +a /tmp/$log        #第一次告警,可以直接写入1小时的时间戳        echo St_s >> /tmp/$log    fi#无论$log文件是否刚刚创建,都需要查看最后一行的时间戳  t_s2=`tail -1 /tmp/$log|awk '{print $1}'`#取出最后一行即上次告警的时间戳后,立即写入当前的时间戳  echo St_s>>/tmp/$log#取两次时间戳差值  v=S[St_s-$t_s2]#如果差值超过1800,立即发邮件if [ $v -gt 1800 ]  then      #发邮件,其中$2为mail函数的第二个参数,这里为一个文件      python mail.py Smail_user S1 "`cat $2`"  2>/dev/null      #定义计算器临时文件,并写入0      echo "0" > /tmp/$log.count  else     #如果计算器临时文件不存在,需要创建并写入0     if  [ ! -f /tmp/$log.count ]      then         echo "0" > /tmp/$log.count     fi     nu=`cat /tmp/$log.count`     #30分钟内每发生异常告警,计算器加1         nu2= S [ Snu +1 ]     echo Snu2>/tmp/$log.count      #当告警次数到达30次需要发邮件     if [ $nu2 -gt 30 ]     then          python mail.py $mail_user  "$1 30 min " " `cat $2`" 2>/dev/null          #第二次告警后,将计算器再次从0开始          echo "0" > /tmp/$log.count      fi fi}#把进程情况存入临时文件,如果加管道求行数会有问题ps aux | grep "$s_name"  | grep -vE  "$$|grep">/tmp/ps.tmpp_n=`wc -l /tmp/ps.tmp | awk '{print $1}'`#当进程数大于0,则说明上次的脚本还未执行完if [ $p_n  -gt 0 ] then      exitfi 先执行一条执行show processlist, 看是否执行成功$Mysql_c -e "show processlist" > /tmp/mysql_pro.log 2>/tmp/mysql_log.err#如果上一条命令执行不成功,说明这个MySQL服务出了问题。if [  $? -gt 0 ]then      m_mail mysql_service_error /tmp/mysql_log.err      exitelse      $Mysql_c -e "show slave status\G" >/tmp/mysql_s.log      n1=`wc -l /tmp/mysql_s.log|awk '{print $1}'`     if [ $n1 -gt 0 ]     then          y1=`grep 'Slave_IO-Running:' /tmp/msyql_s.log|awk -F : '{print $2} ' | sed s# ##g'`          y2=`grep 'Slave_SQL-Running:' /tmp/msyql_s.log|awk -F : '{print $2} ' | sed s# ##g'`          if [ Sy1 == "NO" ]  ||  [ $y2 == "NO" ]          then              m_mail mysql_slavestatus_error /tmp/mysql_s.log          fi      fi fi

转载地址:http://iubxa.baihongyu.com/

你可能感兴趣的文章
Path 路径类 | Directory 文件夹类 | File 文件类 | FileStream 文件流类
查看>>
CentOS6.5安装jdk1.8
查看>>
阿里钉钉软件送100元啦,可支付宝提现
查看>>
Perl 连接Oracle 数据库_libydwei2007-ChinaUnix博客
查看>>
我的友情链接
查看>>
Debian升级
查看>>
Linux 下DHCP高级应用
查看>>
Android 笔记
查看>>
redhat7重置root密码
查看>>
设置控件全局显示样式appearance proxy
查看>>
Redis教程(十):持久化详解
查看>>
64位系统运行特定项目
查看>>
python的issubclass和isinstance以及property
查看>>
MonoDroid学习笔记(二)—— 让你的App在你的手机上跑起来
查看>>
第一篇
查看>>
我的友情链接
查看>>
浮动与清除问题
查看>>
超大磁盘在线扩容
查看>>
Leetcode#189Rotate Array
查看>>
软件自己的我所alternate
查看>>