1. 程式人生 > >mysql 二進位制日誌增量備份sell指令碼

mysql 二進位制日誌增量備份sell指令碼

#function:MySQL增量備份指令碼
#version:1.0.0
#author:leiyuanxin
#date:2018/10/26
#-----------------------------------
#!/bin/sh
exprot LANG=en_US.UTF-8
#設定時間
DATE=`date +%Y%m%d`
#設定資訊
USER=root
[email protected]
#設定路徑
cd /
/usr/bin/mkdir -p mysql_bak/daily
/usr/bin/mkdir -p mysql_bak/logs
BakDir=/mysql_bak/daily
BinDir=/var/lib/mysql
LogFile=/mysql_bak/logs/Daily_$DATE.log
BinlogFile=/var/lib/mysql/relay-bin.index

#重新整理日誌
/usr/bin/mysqladmin -u$USER -p$PASSWORD flush-logs
Counter=`wc -l $BinlogFile | awk '{print $1}'`
NextNum=0
start_time=`date +'%Y-%m-%d %H:%M:%S'`
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next1 Bakup start! >> $LogFile

#這個for迴圈用於比對$Counter,$NextNum這兩個值來確定檔案是不是存在或最新的
for file in `cat $BinlogFile`
do
  base=`basename $file`
  #basename用於擷取relay-bin.00000*檔名,去掉./relay-bin.00000前面的./
  NextNum=`expr $NextNum + 1`
  if [ $NextNum -eq $Counter ]
  then
    echo $base skip! >> $LogFile
  else
    dest=$BakDir/$base
    if(test -e $dest)
    #test -e用於檢測目標檔案是否存在,存在就寫exist!到$LogFile去
    then
      echo $base exist! >> $LogFile
    else
      cp $BinDir/$base $BakDir
      echo $base copying >> $LogFile
   fi
  fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next2 Bakup succ! >> $LogFile
end_time=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$start_time" +%s);
end_seconds=$(date --date="$end_time" +%s);
echo "本次備份執行時間: "$((end_seconds-start_seconds))"s" >> $LogFile

參考文章:https://www.jb51.net/article/123786.htm