MySQL基於binlog文件的異地備份策略腳本--shell

[root@Mysql28 shell]# cat binlog.sh 
#!/bin/sh
#mysql binlog backup script
#by song
ftp_backup="D:\\dbbackup\\logbackup"
/usr/local/mysql/bin/mysqladmin -uroot -proot  flush-logs
DATADIR=/usr/local/mysql/data
BAKDIR=/data/back_up/binlog


#HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat /usr/local/mysql/data/mysql-bin.index`    ------------拿出所有的binlog文件的具體名字
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1`                              -------循環取出上步驟中的binlog文件列表;
done
NextNum=0
for file in $FILELIST
do
   base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"                                    -------跳過最後一個binlog正在使用的文件,不進行備份,因爲此binlog mysql正在寫入,不進行拉取備份;
  else
dest=$BAKDIR/$base
DATE_D=(`stat -Z -c  %y $base`,"+%Y%m%d%H%M%S")      ------計算出binlog文件的生產日期;
if(test -e $dest)
then
 echo "skip exist $base"                 ------驗證是否有binlog同名字的存在
else
 echo "copying $base"                      ---------沒有同名字的就開始copy到文件夾內
mkdir -p $BAKDIR/$DATE_D               ------當天產生的binlog文件,保存到當天的文件夾內;
cp -rp $base $BAKDIR/$DATE_D      ---------執行copy
wput -t 3 -B -s --basename $BAKDIR   $BAKDIR/$DATE_D/mysql-bin.*  ftp://ftpuser:[email protected]:21/logbackup/192.168.1.168/      ----當天的文件異地傳輸到目標機器上
fi
fi
done
if [ $? = 0 ]      -------驗證以上步驟是否執行完成,如果完整就退出;
then
echo "backup mysql binlog ok"
else
echo "backup mysql binlog failover!!!"
fi

[root@Mysql28 shell]# 

以上就完成了binlog的異地傳輸;

腳本比較簡單,不完善地方,可以隨時更新;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章