阶段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