1. 程式人生 > >mysql複製延遲監控指令碼

mysql複製延遲監控指令碼

針對mysql一主多從時候,大資料情況下可能會遇到主從複製延遲問題,壓測mysql時,需要進行復制延遲進行監控,Lepus可以對複製延遲方面資訊進行監控,若專案緊急沒時間部署Lepus情況下,可直接監控mysql複製延遲問題:

監控mysql複製狀態及延遲問題,主要監控命令為:show slave status。但是每次執行較為麻煩,編寫shell指令碼,壓測期間自動監控統計,2種shell方式:

①、比如持續監控列印800次延遲情況,每次列印監控延遲時間,get.sh:

n=800
for ((i=n;i>=1;i--))
do
echo "$i :==============================" 
mysql -u luojie -h 192.168.16.52 -pluo_7070 -e "show slave status\G" | grep -i "seconds"
sleep 1
done

②、增加其他邏輯處理:

!/bin/sh
# 本指令碼用於監控MySQL 複製是否執行,並且根據具體的錯誤程式碼自動判斷是否忽略
#
now=`date +"%Y%m%d%H%M%S"`
StatFile="./slave_status.$now"
#mysql制監狀態監控資料,儲存到指定檔案
echo "show slave status\G" | mysql -uluojie -pluo_7070 > $StatFile
#取得 io_thread, sql_thread, last_errno 的狀態
IoStat=`cat $StatFile | grep Slave_IO_Running | awk '{print $2}'`
SqlStat=`cat $StatFile | grep Slave_SQL_Running | awk '{ print $2}'`
Errno=`cat $StatFile | grep Last_Errno | awk '{print $2}'`
Behind=`cat $StatFile | grep Seconds_Behind_Master | awk '{print $2}'`
#IoStat=`cat $StatFile | head -n 12 | tail -n 1 | awk '{print $2}'`
#SqlStat=`cat $StatFile | head -n 13 | tail -n 1 | awk '{print $2}'`
#Errno=`cat $StatFile | head -n 20 | tail -n 1 | awk '{print $2}'`
if [ $IoStat = 'No' ] || [ $SqlStat = 'No' ] ; then
echo "[chkslave]"
date

 #如果錯誤程式碼為 0,則可能是因為網路等原因導致複製中斷,直接重新啟動複製即可
 if [ "$Errno" -eq 0 ] ; then
  echo "start slave io_thread; start slave sql_thread;" | mysql -uluojie -pluo_7070
  echo "start slave io_thread; start slave sql_thread;"
 #如果是一些不是很要緊的錯誤程式碼,也可以直接略過
 elif [ "$Errno" -eq 1007 ] || [ "$Errno" -eq 1053 ] || [ "$Errno" -eq 1062 ] || [ "$Errno" -eq 1213 ] \
|| [ "$Errno" -eq 1158 ] || [ "$Errno" -eq 1159 ] || [ "$Errno" -eq 1008 ] ; then
  echo "stop slave; set global sql_slave_skip_counter=1; slave start;" | mysql -uluojie -pluo_7070
  echo "stop slave; set global sql_slave_skip_counter=1; slave start;"
 else
  echo `date` "slave is down!!!"
 fi
 # 遠遠落後於 master
 if [ $Behind -gt 200 ] ; then
   echo `date` "slave is behind master $Behind seconds!!!"
 fi

#刪除臨時狀態檔案
rm -f $StatFile
echo "[/chkslave]"
fi