Linux运维之Shell编程------(一)监控MySQL错误码及主从复制同步异常

Linux运维之Shell编程

一、监控MySQL错误码及主从复制同步异常

题目:监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
阶段1:开发一个守护进程脚本每30秒实现检测一次。
阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

阶段2:

#!/bin/bash
#
CONTACT=‘[email protected]‘
ERR_LOG=‘/var/log/mariadb/mariadb.log‘

email_to_admin() {
  mailsubject="MySQL Error."
  mailbody="`date ‘+%F %H:%M:%S‘`: MySQL Error,please check and repair."
  echo $mailbody | mail -s "$mailsubject" $CONTACT
}

while true;do
  for ERROR_CODE in `grep ‘Error_code: [[:digit:]]\+‘ $ERR_LOG | grep -o ‘[[:digit:]]\+‘` ;do
    case $ERROR_CODE in
    1007)
      continue
      ;;
    1008)
      continue
      ;;
    1158)
      continue
      ;;
    1159)
      continue
      ;;
    1162)
      continue
      ;;
    *) ;;
    esac
    email_to_admin
  done
  sleep 30
done

阶段3:

#!/bin/bash
#
DB_USER=‘root‘
DB_PASSWORD=‘jingpei‘
DB_PORT=‘3306‘
MASTER=‘192.168.0.76‘
SLAVE=‘192.168.0.77‘
CMD_CONN_MASTER=‘mysql -u$DB_USER -p$DB_PASSWORD -P$DB_PORT -h$MASTER‘
CMD_CONN_SLAVE=‘mysql -u$DB_USER -p$DB_PASSWORD‘ -P$DB_PORT -h$SLAVE‘
CONTACT=‘[email protected]‘

declare -a master_status
master_status[0]="CMD_CONN_MASTER -e ‘show master status\G‘ | egrep File | cut -d: -f2"
master_status[1]="CMD_CONN_MASTER -e ‘show master status\G‘ | egrep Position | cut -d: -f2"

declare -a slave_status
slave_status[0]="CMD_CONN_SLAVE -e ‘show slave status\G‘ | egrep Master_Log_File | cut -d: -f2"
slave_status[1]="CMD_CONN_SLAVE -e ‘show slave status\G‘ | egrep Read_Master_Log_Pos | cut -d: -f2"
slave_status[2]="CMD_CONN_SLAVE -e ‘show slave status\G‘ | egrep Last_Errno | cut -d: -f2"

email_to_admin() {
  mailsubject="Syncing failed."
  mailbody="`date ‘+%F %H:%M:%S‘`: Syncing of master-slave is failed,please check and repair."
  echo $mailbody | mail -s "$mailsubject" $CONTACT
}

while true ; do
  if [ ${master_status[0]} == ${slave_status[0]} -a ${master_status[1]} == ${slave_status[1]} -a ${slave_status[2]} == 0 ]; then
    echo "Syncing of master-slave is OK."
  else
    echo "Syncing of master-slave is failed."
    email_to_admin
  fi
  sleep 30
done

原文地址:https://www.cnblogs.com/cured/p/9452401.html

时间: 2024-08-06 23:31:16

Linux运维之Shell编程------(一)监控MySQL错误码及主从复制同步异常的相关文章

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算. 1.常见的算术运算符: 提示: 此处对于我自己来说++.--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下: [[email protected] ~]# a=10                  ==>定义变量a[[email protected] ~]# echo $((a++)) ==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.10[[email 

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

Linux运维不可不知的性能监控和调试工具

Linux运维不可不知的性能监控和调试工具 1 nagios Nagios是一个开源监控解决方案,我觉得他可以监控一切 ,可以看一下我以前的文章:NAGIOS 2 ps #用来查看程序的运行情况 ps -ef |grep svr.py|grep -v grep |awk '{print $2}' #查看svr.py的进程pid号 14554 [email protected]:~> ps -e -o pid,args --forest #层次结构中的进程ID 3 free #查看系统的物理(RA

&lt;zz&gt;linux运维自动化shell脚本小工具

from http://www.cnblogs.com/wang-li/p/5728461.html linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU #Sun Jul 31 17:25:41 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/hom

linux运维自动化shell脚本小工具

linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU #Sun Jul 31 17:25:41 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH TERM=linux export TERM CpuResu

Shell编程检测监控mysql的CPU占用率

shell编程很强大! 网站访问量大的时候mysql的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不可预见性,我们不知道什么时候mysql的占用率达到300%,还是写个程序定期判断比较靠谱. 学了shell编程,写了下面的脚本: #!/bin/bash cpu=`ps aux | grep 'mysqld$' | cut -d " " -f6 | cut -d. -f1` if [ $c