开发者社区> 首席提问官> 正文

监控MySQL数据库的主从状态的shell脚本

简介: MySQL数据库的主从状态
+关注继续查看

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

#!/bin/bash
#用途:监控MySQL数据库的主从状态的shell的脚本。
#作者:Caron maktini
#日期:2018年11月19日
#版本:v0.1
#要求如下:每分钟检测一次主从连接状况,未连接则不再执行;不同步情况发生后将向预留邮箱报警;在没有解决情况下,需要每隔30分钟发一次告警邮件。

#把脚本名字存入变量s_name
s_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.tmp
p_n=`wc -l /tmp/ps.tmp | awk '{print $1}'`

#当进程数大于0,则说明上次的脚本还未执行完

if [ $p_n  -gt 0 ]
 then
      exit
fi

 先执行一条执行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
      exit
else
      $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

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

相关文章
使用Shell脚本安装MySQL(二)
⭐本文介绍⭐ 随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要。在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分。本文将主要介绍Shell脚本的基础,变量使用等知识。
49 0
使用Shell脚本安装MySQL(一)
⭐本文介绍⭐ 随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要。在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分。本文将主要介绍Shell脚本的基础,变量使用等知识。
48 0
shell脚本使用mysqldump+mysql同步线上库和测试库数据
shell脚本使用mysqldump+mysql同步线上库和测试库数据
69 0
多次循环备份MySQL数据库数据shell脚本
多次循环备份MySQL数据库数据shell脚本
150 0
MySQL数据备份shell脚本
MySQL数据备份shell脚本
35 0
自动化运维必看!Shell脚本实现Mysql自动备份!
对于一些重复性的工作,可以通过编写shell脚本来进行自动实现!
185 0
《懒人Shell脚本》之八——定期备份Mysql数据库表的实现
0.背景 实际开发环境中,前端程序需要在给定时间段内,将数据更新/插入到mysql指定的库表中。随着数据量的增多,基础库表基数的增长,每更新一次都会有5s左右的卡顿。
65 0
mysql 忘记root密码破解root密码破解所有用户密码,shell脚本
自动化破解mysql5 mysql8 mariadb 数据库密码
220 0
《懒人Shell脚本》之八——定期备份Mysql数据库表的实现
实际开发环境中,前端程序需要在给定时间段内,将数据更新/插入到mysql指定的库表中。随着数据量的增多,基础库表基数的增长,每更新一次都会有5s左右的卡顿。 本文来了几种解决方案,请到文中寻找吧!
560 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Shell 脚本速查手册
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载
云数据库RDS MySQL从入门到高阶
立即下载