腳本思路:
1、使用MySQL客戶端命令"mysql"直接在命令行中運行MySQL指令"show slave status\G;"來查看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 status\G;' 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 status\G;'"命令執行的結果,以供后續的腳本指令語句對結果進行處理,其實際命令只運行了一次,就可以多處引用,同時也提高了腳本工作的效率。