shell監控MySQL主從狀態指令碼兩則

來源:互聯網
上載者:User

標籤:mysql監控   mysql主從   主從監控   mysql延遲   延遲監控   

內容為自己的一點總結,如有不對歡迎狠勁兒拍磚

本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,翻版可恥

監控主從複製正常與否

相比各位都應該知道,監控主從是否工作正常,涉及命令如下:

show slave status\G;

那麼,我們需要關注的參數如下:

1. 首先查看SQL和IO線程是否為YES狀態(想必各位都明白了)

2. 是否有延遲 是否大於0   #一般產生環境延遲是否大於500秒,如果大於500則警示,如大於1000則嚴重警示

#比如傳遞一個sql到slave上,binlog中在eventhear中存在time stamp時間戳記,在下條binlog拿到的時間會進行比較,如果目前時間是多少則顯示多少,如果更新非常頻繁500秒會產生更多的sql積累在其中

至少生產中監控就是這麼實現的以及包括nagios的監控外掛程式也是這麼實現的


主要關注的值本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,翻版可恥

1.Master_Log_File Read_master_log_Pos 2.Relay_Master_Log_FileExec_Master_log_pos 3.Seconds_Behind_master

判斷一個庫主要觀察以上幾點,如果主庫掛了,Seconds_Behind_master 會已經成為NULL了

那麼這樣如何去觀測從庫是否日誌同步完成,如下所示


通過shell實現監控同步的方法

廢話不多說了直接上菜

1.利用status去觀測是否已經同步完成

判斷公式

以下為判斷依據,判斷以下值

Master_Log_File 和 Relay_Master_Log_File 的值必須相等

判斷同步的位移量

Read_master_log_Pos 和 Exec_Master_log_pos 的值必須相等

根據以上為最基礎的判斷依據,是否可將其從庫提升為主庫,就會在從庫中判斷master log file 是否讀到的位置一樣並找到一個最靠前的一個節點提升為主

shell內容如下所示:本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,翻版可恥

#!/bin/bashuser=‘root‘password=‘mypass‘thread_status=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e ‘show slave status\G‘|grep -i yes|wc -l`status=(`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e ‘show slave status\G‘| egrep -i "Master_Log_File|Relay_Master_Log_File|Read_master_log_Pos|Exec_Master_log_pos|Seconds_Behind_Master" |awk -F‘:‘ ‘{print $2}‘`)echo ${status[4]}if [[ "$thread_status" != 2 ]]; then        echo "the Replication is Fault , at $(date)" > $catalog        echo `uname -n` | mail [email protected] < $catalog        exit 1fiif [[ "${status[4]}" > ‘300‘ ]];then        echo "yan chi guo gao, at $(date)"  > $catalog        echo `uname -n` | mail [email protected] < $catalog        exit 2fiif [[ ${status[0]} == ${status[2]} ]] && [[ ${status[1]} == ${status[3]} ]]; then        echo ‘The Replication is Normal‘        exit 0    else        echo "the Replication is Fault , at $(date)" > $catalog        echo `uname -n` | mail [email protected] < $catalog        exit 2fi

本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,翻版可恥


2.依賴於程式檢測 本文來自http://yijiu.blog.51cto.com/轉載請經博主同意,翻版可恥

比如程式在master建立表,並隨意設定欄位,並在master上擷取一個時間並寫入

now的時間在程式中自行得到並記錄,最後在slave中執行select 查看結果是否與時間對應一致

如果時間一樣則認為正常,如果master上的時間減去slave上的時間 出現了延遲,那麼證明延遲存在的,但是這種方法存在缺陷,比如主庫掛了那麼則不可用

#!/bin/bashuser=‘root‘password=‘mypass‘/usr/local/mysql/bin/mysql -u"$user" -p"$password" -e ‘replace into master.repl_heart set t=now(),id=1;‘ >/dev/null 2>&1master_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql.sock -e ‘select t from master.repl_heart where id=1;‘ | awk ‘{print $2}‘ | tail -1`slave_select=`/usr/local/mysql/bin/mysql -u"$user" -p"$password" -S /tmp/mysql_3308.sock -e ‘select t from master.repl_heart where id=1;‘ | awk ‘{print $2}‘ | tail -1`master_date=`date -d "$master_select" +%s`slave_date=`date -d "$slave_select" +%s`delay=`echo "$master_date"-"$slave_date" | bc`if [[ $master_date == $slave_date  ]];thenecho ‘is ok‘   elif [[ $delay -le 500 ]];then   echo cun zai yan chi "$delay"   else        echo "the Replication delay too large "$delay" , at $(date)" > $catalogecho `uname -n` | mail [email protected] < $catalogfi

需要注意的是:複製中,如果是行格式,就是主庫的時間;如果不是行式,這個方法可以把now()這個內建函數在s指令碼中產生再寫入


以上,為監控mysql主從的兩種shell的寫法,如有不足,麻煩指出,感謝各位











本文出自 “心情依舊” 部落格,轉載請與作者聯絡!

shell監控MySQL主從狀態指令碼兩則

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.