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的异地传输;

脚本比较简单,不完善地方,可以随时更新;


你可能感兴趣的:(Mysql-备份,Linux-shell)