脚本思路:
1、使用MySQL客户端命令"mysql"直接在命令行中运行MySQL指令"show slave statusG;"来查看MySQL主从复制状态信息。
2、通过状态信息中的一些重要字段来判断当前主机的主从复制状态是否健康。
3、若不健康则一般是由于Slave上SQL执行过程中出现异常,则将异常的SQL信息打印到屏幕上。
脚本内容:
#!/bin/bash
# @author:rby
# @title:检查MySQL主从健康情况
#
# 基本配置
#
MYSQL_USER="root"
MYSQL_PASSWORD="xxx"
MYSQL_HOST="localhost"
MYSQL_PORT=3306
#
# 检查MySQL主从健康情况
#
show_slave_status=`mysql -h"$MYSQL_HOST" -P"$MYSQL_PORT" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" -A -e 'show slave statusG;' 2>/dev/null`
slave_sql_running_state=`echo "$show_slave_status" |grep Slave_SQL_Running_State |awk -F ': ' '{print $2}'` # Slave上SQL运行状态
ms_status=`echo "$show_slave_status" |grep Running: |awk -F ': ' '{if($2=="Yes"){sum += 1}}; END{print sum}'` # IO、SQL线程运行状态:2表示健康,!2表示不健康
# 如果主从复制状态是不健康的则在屏幕上打印Slave主机SQL运行状态
if [ $ms_status -eq 2 ];then
echo "ms running status: 1"
else
echo "ms running status: 0"
echo "error: $slave_sql_running_state"
fi
脚本解析:
使用grep命令基于关键字过滤获取关键行
使用awk命令进行判断和筛选字段
使用Shell脚本中的if语句进行判断,并打印相关信息到屏幕上
脚本好处:
在本脚本中,使用变量"$show_slave_status"来存储"mysql -uxxx -pxxx -e'show slave statusG;'"命令执行的结果,以供后续的脚本指令语句对结果进行处理,其实际命令只运行了一次,就可以多处引用,同时也提高了脚本工作的效率。