slavedm.sh源码:

  1. #!/bin/sh  
  2. #  
  3. # Slave Daemon  
  4. # @version 1.0  
  5. # @author Hellex <[email]Hellex@live.com[/email]>  
  6. #  
  7.  
  8. #从库服务器配置,分别是主机名,端口,用户名,密码,请一一对应  
  9. mysql_host=("db2" "db3" "db4" "db5" "db6" "db7" "db8" "db9" "db10" "db11" "db12" "db13")  
  10. mysql_port=(3306 3306 3306 3306 3306 3306 3406 3306 3307 3406 3309 3310)  
  11. mysql_user=("dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser" "dmuser")  
  12. mysql_password=("dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword" "dmpassword")  
  13.  
  14. #loop for checking  
  15. len=${#mysql_host[*]}  
  16. i=0  
  17. while  [ $i -lt $len ]  
  18. do  
  19.     #get slave status  
  20.     status=`/usr/local/webserver/mysql/bin/mysql  -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"SHOW SLAVE STATUS\G"`  
  21.  
  22.     #check SQL Thread  
  23.     if (echo "$status"|egrep "Slave_IO_Running: *Yes" 2>&1 > /dev/null) && (echo "$status"|egrep "Slave_SQL_Running: *No" 2>&1 > /dev/null)  
  24.     then  
  25.  
  26.        #log error  
  27.        sql_error=`echo "$status"|egrep "Last_SQL_Error:" | awk -F 'Last_SQL_Error:' '{printf $2}'`  
  28.        sql_erroro=`echo "$status"|egrep "Last_SQL_Errno:" | awk -F 'Last_SQL_Errno:' '{printf $2}'`  
  29.        echo `date +%y%m%d%H%M%S`"    "${mysql_host[$i]}:${mysql_port[$i]}"    "${sql_erroro}"    "${sql_error} >> /server/daemon/slavedm.log  
  30.  
  31.        #stop slave  
  32.        /usr/local/webserver/mysql/bin/mysql  -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"STOP SLAVE" 2>&1 > /dev/null  
  33.  
  34.        #skip error  
  35.        /usr/local/webserver/mysql/bin/mysql  -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1" 2>&1 > /dev/null  
  36.  
  37.        #start slave  
  38.        /usr/local/webserver/mysql/bin/mysql  -h${mysql_host[$i]} -u${mysql_user[$i]} -p${mysql_password[$i]} -P${mysql_port[$i]} -e"START SLAVE" 2>&1 > /dev/null  
  39.  
  40.     fi  
  41.     let i++  
  42. done 

slavedm.sh脚本做的工作就是检查从库复制的IO及SQL进程,当IO进程正常,SQL不正常的时候,说明SQL执行有错误,这时候脚本自动把错误记录下来。
格式如:yymmddHHMMSS    主机名:端口    错误代码    错误信息
这些错误会记录到slavedm.log文件
记录完错误之后,slavedm.sh执行跳过错误语句
/usr/local/webserver/mysql/bin/mysql工具的地址请根据自己的情况更改,这里就不设为变量了。