#!/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的異地傳輸;
腳本比較簡單,不完善地方,可以隨時更新;