天天看点

监控mysql主从同步状态是否异常,如果异常,则发生短信或邮寄给管理员

阶段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&lt;${</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 &amp;&amp;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

继续阅读