Sun
发布于 2021-07-13 / 304 阅读
0
0

mysql基于binlog的增量备份

  • 注:该脚本基于binlog日志备份无需第三方工具,需要配合全量备份使用
#!/bin/bash
#备份数据库名
DBNAME=xsw
#系统当前时间
TIME=`date +"%Y%m%d%H%M"`
#日志截取结束时间
BAKSTOP=`date +"%Y-%m-%d %H:%M:%S"`
#日志截取开始时间(当前时间2小时前,定时任务执行周期要一致)
BAKSTART=`date -d "2 hour ago" +"%Y-%m-%d %H:%M:%S"`
#备份目录
BAKDIR=/tmp/bak/`date +"%F"`
#mysq-binlog日志目录
BINLOG_HOME=/var/lib/mysql
#判断备份目录是否存
if [ ! -d "$BAKDIR" ]; then
mkdir -p $BAKDIR
fi

###执行备份
for i in `cat "$BINLOG_HOME"/mysql-bin.index`;##获取所有binlog日志(建议配置binlog保存时长)
do 
/usr/bin/mysqlbinlog --no-defaults --database=$DBNAME --start-datetime="$BAKSTART" --stop-datetime="$BAKSTOP" $BINLOG_HOME/$i |gzip >> $BAKDIR/$DBNAME-$TIME.sql.gz;
done

故障恢复场景(全量备份每日0点备份,增量备份为2小时一次)
若数据库在上午7时发生故障,数据丢失,则先恢复当日凌晨0点全量备份,再依此恢复2点,4点,6点的增量备份

for i in `cat mysql-bin.index` ; do  mysqlbinlog --no-defaults --database=halodb --start-datetime="2020-10-01 11:09:14" --stop-datetime="2020-11-01 11:09:14" $i  >> /tmp/xsw.sql; done

评论