您的位置:首页 > 运维架构 > Shell

MySQL基于binlog文件的异地备份策略脚本--shell

2013-11-27 13:35 711 查看
[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:xxxxx@192.168.25.163: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的异地传输;

脚本比较简单,不完善地方,可以随时更新;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: