階段1:開發一個守護程序腳本每30秒實作檢測一次。
階段2:如果同步出現如下錯誤号(1158,1159,1008,1007,1062),請跳過錯誤
階段3:請使用數組技術實作上述腳本(擷取主從判斷及錯誤号部分)
<code>[root@slave ~]</code><code># mysql -u root -proot -e "show slave status\G;"</code>
<code>*************************** 1. row ***************************</code>
<code> </code><code>Slave_IO_State: Waiting </code><code>for</code> <code>master to send event</code>
<code> </code><code>Master_Host: 172.16.1.2 </code><code>#目前的mysql master伺服器主機</code>
<code> </code><code>Master_User: myslave</code>
<code> </code><code>Master_Port: 3306</code>
<code> </code><code>Connect_Retry: 60</code>
<code> </code><code>Master_Log_File: master-bin.000003</code>
<code> </code><code>Read_Master_Log_Pos: 471</code>
<code> </code><code>Relay_Log_File: relay-log-bin.000002</code>
<code> </code><code>Relay_Log_Pos: 252</code>
<code> </code><code>Relay_Master_Log_File: master-bin.000003</code>
<code> </code><code>Slave_IO_Running: Yes</code>
<code> </code><code>Slave_SQL_Running: Yes</code>
<code> </code><code>Master_SSL_Key: </code>
<code> </code><code>Seconds_Behind_Master: 0 </code><code>#和主庫比同步延遲的秒數</code>
<code> </code><code>準備:</code>
<code> </code>
<code> </code><code>egrep</code> <code>"_Running|Behind_Master"</code> <code>slave.log </code><code>#過濾</code>
<code> </code><code>Seconds_Behind_Master: 0</code>
<code> </code>
<code> </code><code>[root@slave ~]</code><code># egrep "_Running|Behind_Master" slave.log | awk '{print $NF}'</code>
<code>Yes</code>
<code>0</code>
階段一:開發一個守護程序腳本每30秒實作檢測一次。
<code>#!/bin/bash</code>
<code>while</code> <code>true</code>
<code>do</code>
<code> </code><code>array=($(</code><code>egrep</code> <code>"_Running|Behind_Master"</code> <code>slave.log|</code><code>awk</code> <code>'{print $NF}'</code><code>))</code>
<code> </code><code>if</code> <code>[ </code><code>"${array[0]}"</code> <code>== </code><code>"Yes"</code> <code>-a </code><code>"${array[1]}"</code> <code>== </code><code>"Yes"</code> <code>-a </code><code>"${array[2]}"</code> <code>== </code><code>"0"</code> <code>]</code>
<code> </code><code>then</code>
<code> </code><code>echo</code> <code>"MySQL is slave is ok"</code>
<code> </code><code>else</code>
<code> </code><code>char=</code><code>"MySQL slave is not ok"</code>
<code> </code><code>echo</code> <code>"$char"</code>
<code> </code><code>echo</code> <code>"$char"</code><code>|mail -s </code><code>"$char"</code> <code>[email protected]</code>
<code> </code><code>break</code>
<code> </code><code>fi</code>
<code> </code><code>sleep</code> <code>30</code>
<code>done</code>
<code>執行結果:</code>
<code>[root@slave ~]</code><code># sh test.sh </code>
<code>MySQL is slave is ok</code>
終極版:
<code>#Date:2017-7-3</code>
<code>#Author:xcn([email protected])</code>
<code>#version 1.0</code>
<code>mysql_cmd=</code><code>"mysql -u root -proot"</code>
<code>errorno=(1158 1159 1008 1007 1062)</code>
<code> </code><code>array=($($mysql_cmd -e </code><code>"show slave status\G"</code><code>|</code><code>egrep</code> <code>'_Running|Behind_Master|Last_SQL_Errno'</code><code>|</code><code>awk</code> <code>'{print $NF}'</code><code>))</code>
<code> </code><code>for</code> <code>((i=0;i<${</code><code>#errorno[*]};i++))</code>
<code> </code><code>do</code>
<code> </code><code>if</code> <code>[ </code><code>"${array[3]}"</code> <code>= </code><code>"${errorno[$i]}"</code> <code>];</code><code>then</code>
<code> </code><code>$mysql_cmd -e </code><code>"stop slave &&set global sql_slave_skip_counter=1;start slave;"</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
提示:這個腳本可以用于生産環境中,監控mysql主從同步狀态是否異常,根據
<code>'_Running|Behind_Master|Last_SQL_Errno'</code>
這個進行判斷,如果不正常的話則會進一步判斷狀态碼,然後進行輸出,則會發郵件或短信給運維人員
本文轉自 baishuchao 51CTO部落格,原文連結:http://blog.51cto.com/baishuchao/1944170