文章目录


在大多数人的印象中,运维更加像修电脑的,或者折腾服务器和交换机的。也不能算错,作为运维的一方面,上面说的,是系统运维工作。其实运维共有5个方面的工作,从网上搞了一张图,如下:
运维分裂
今天我们要说的是DEV和DBA,这两个岗位,是需要写代码的,当然,从待遇上,也是比系统运维要高的,如果你现在正在做系统运维,想要更好的发展,那么DEV和DBA是你可以考虑的方向。

面试题

我们看一个面试题,如果你不看答案能够很轻松的做出来,那么离DEV和DBA就不远了,进入正题:
监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:
阶段1:开发一个守护进程脚本每30秒实现检测一次。
阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误。
阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分)

答案解析

怎么样,你有思路了吗?
下面是从网上找来的答案,参见此文监控MYSQL主从同步状态是否异常,有什么问题,可以直接到原文去请教。
本文重点解析代码,先把代码贴出来:

#!/bin/bash
#Date:2017-7-3
#Author:xcn(baishuchao@yeah.net)
#version 1.0
mysql_cmd="mysql -u root -proot"
errorno=(1158 1159 1008 1007 1062)
while true
do
  array=($($mysql_cmd -e "show slave status\G"|egrep ‘_Running|Behind_Master|Last_SQL_Errno‘|awk ‘{print $NF}))
  if [ "${array[0]}" == "Yes" -a "${array[1]}" == "Yes" -a "${array[2]}" == "0" ]
  then
    echo "MySQL is slave is ok"
  else
      for ((i=0;i<${#errorno[*]};i++))
      do
        if [ "${array[3]}" = "${errorno[$i]}" ];then
        $mysql_cmd -e "stop slave &&set global sql_slave_skip_counter=1;start slave;"
        fi
      done
      char="MySQL slave is not ok"
      echo "$char"
      echo "$char"|mail -s "$char" 995345781@qq.com
      break
  fi
  sleep 30
done

代码思路整理:

  1. 首先定义了变量;
  2. 进入循环过程,其中egrep,awk的用法很不错;
如果匹配数组中012
不匹配
如果匹配数组中3
不匹配
定义变量和数组
开始循环
定义数组判断,其中egrep,awk不错
判断
从库正常
显示从库异常,并循环
判断
执行从库重启
提示异常并发邮件通知
sleep 30

参考文档

Logo

一站式 AI 云服务平台

更多推荐