欢迎点评,多谢指教……

【shell】mysql备份脚本

上一篇 / 下一篇  2017-04-15 21:54:51 / 个人分类:linux

#!/bin/bash
#########################################################
# this script. function is:
# check_mysql_slave_replication_status
# USER   YYYYY-MM-DD -ACTION
# yping  2017-04-15  

#########################################################

path=/server/scripts
MAIL_GROUP="5188@qq.ocm 5199@qq.com"
PAGER_GROUP="15112530452"
USER=root
PASSWORD=yping
PORT=3307 #<== 端口
MYSQLCMD="mysql -u$USER -p$PASSWORD -S /data/$PORT/mysql.sock"

error=(1008 1007 1062)                 # <== 可以忽略的主从复制错误号
RETVAL=0
[ ! -d "$path ] && mkdir -p $path
function JudgeError(){                 # <== 如果传入的错误号和数组里的元素相匹配,则执行then后面的命令。
    for((i=0;i<${#error[*]};i++))
do 
   if [ "$1" == "${error[$i]}" ]
   
then 
   echo "MySQL slave errorno is $1, auto repairing it."
$MYSQLCMD -e "stop slave; set global sql_slave_skip_counter=1; start slave;"    # <== 自动修复
fi
    done
    return $1
}


function CheckDb() {                      # <==  定义检查数据库主从复制状态的函数
    status=($(awk -F ':' '/_Running | Last_Errno | _Behind/{print $NF}' slave.log ))
expr ${status[3]} + 1 &>/dev/null     # <==  这个是延迟状态值,用于进行是否为数字的判断
    if [ $? -ne 0 ];
   then
            status[3]=300
fi
if [ "${starts[1]}" == "Yes" -a  "${starts[1]}" == "Yes" -a "${starts[3]}" -lt 120 ]
   # <== 两个线程都为Yes,并且延迟小于120秒,即认为复制状态是正常的
   then
       #echo "Mysql replcation is ok "
   return 0
else
   
   #echo "Mysql replcation is failed "
   JudgeError ${starts[2]}        # <== 否则,将错误号${starts[2]}传入JudgeError函数,判断错误号是否可以自动修复
 
 
fi
}


function MAIL() {                          # <== 定义邮件函数
    local SUBJECT_CONTENT=$1               # <== 将函数的第一个传参赋值给主题变量。         
for MAIL_USER in `echo $MAIL_GROUP`    # <== 遍历邮件列表。
do
   mail -s "SUBJECT_CONTENT " $MAIL_USER <$LOG_FILE      # <== 发邮件
done
}

function PAGER() {
    for PAGER_USER in `echo $PAGER_GROUP`
do 
   TITLE=$1                          # <== 将函数的第一传参赋值给主题变量。
CONTACT=$PAGER_USER               # <== 将手机号赋值给CONTACT变量。
curl -d cdkey=5ADF-EFA -d password=yping -d phone=$CONTACT -d message="$TITLE[$2]" $HTTPGW
done
}


function SendMsg() {
    if [ $1 -ne 0 ]                       # <== 传入第一个参数,如果不为0,则表示复制有问题,这里的$1即为CheckDb里的返回值
   then
RETVAL=1
NOW_TIME=`date +"+Y-%m-%d %H:%M:%S"`           # <== 报警时间
SUBJECT_CONTENT="mysql slave is error, errorno is $2, ${NOW_TIME}."    # <==报警主题
echo -e "$SUBJECT_CONTENT" | tee $LOG_FILE     # <== 输出信息,并记录到日志
MAIL $SUBJECT_CONTENT                          # <== 邮件报警  
PAGER $SUBJECT_CONTENT $NOW_TIME               # <== 发短信 
else
   echo "Mysql slave status is ok"
RETVAL=0
fi
return $RETVAL
}

function main() {
    while true
do
   checkDb
SendMsg $?
sleep 10
done
}

main


TAG: MySQL mysql

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2017-04-28  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 789
  • 日志数: 8
  • 建立时间: 2017-03-29
  • 更新时间: 2017-04-23

RSS订阅

Open Toolbar