前置条件:centos7, xtrabackup, mysql5
全量备份
./backup.sh -f
增量备份
./backup.sh -i
如果出现错误提示
/bin/sh^M: bad interpreter: No such file or directory
vim 编辑此文件
:set ff=unix :x
shell脚本
#!/bin/sh
# MySQL配置文件
CONF='/etc/my.cnf'
# 备份用户名密码
USER=''
PAWD=''
Time=`date +%Y%m%d_%H%M%S`
# 备份路径
BASEDIR='/data/backup'
# 备份保留天数
BACKUP_SAVE_DAYS='180'
#创建备份目录
[[ -d $BASEDIR ]] || mkdir $BASEDIR
[[ -d "$BASEDIR/full" ]] || mkdir "$BASEDIR/full"
[[ -d "$BASEDIR/incr" ]] || mkdir "$BASEDIR/incr"
[[ -d "$BASEDIR/full/logs" ]] || mkdir "$BASEDIR/full/logs"
[[ -d "$BASEDIR/incr/logs" ]] || mkdir "$BASEDIR/incr/logs"
#开始备份
StartTime=`date +%Y%m%d_%H%M%S`
#全量备份
if [ "$1" = '-f' ];then
FULLLOGFILE="$BASEDIR/full/logs/${Time}.log"
touch ${FULLLOGFILE}
echo "Start-Time :${StartTime}" |tee -a ${FULLLOGFILE}
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" |tee -a ${FULLLOGFILE}
innobackupex --defaults-file=${CONF} --user=${USER} --password=${PAWD} --stream=tar ${BASEDIR}/full 2>> ${FULLLOGFILE}|gzip >${BASEDIR}/full/${Time}.tar.gz
StopTime=`date +%Y%m%d_%H%M%S`
echo "Stop-Time :${StopTime}" |tee -a ${FULLLOGFILE}
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" |tee -a ${FULLLOGFILE}
# 清除N天之前的备份
cd ${BASEDIR}/full
/usr/bin/find -name "*.tar.gz" -mtime +${BACKUP_SAVE_DAYS} -exec rm {} \;
/usr/bin/find -name "*info.log" -mtime +${BACKUP_SAVE_DAYS} -exec rm {} \;
#增量备份
elif [ "$1" = '-i' ];then
INCRLOGFILE="$BASEDIR/incr/logs/${Time}.log"
#LASTBAKNAME="$BASEDIR/incr/last_backup_filename.temp"
touch ${INCRLOGFILE}
echo "Start-Time :${StartTime}" |tee -a ${INCRLOGFILE}
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" |tee -a ${INCRLOGFILE}
#查找最近的增量备份目录
LATEST_INCR=`find $BASEDIR/incr -mindepth 1 -maxdepth 1 -type d ! -name logs | sort -nr | head -1`
if [ ! $LATEST_INCR ];then
#进行全备
echo "未发现增量备份文件,进行全备" |tee -a ${INCRLOGFILE}
innobackupex --defaults-file=${CONF} --user=${USER} --password=${PAWD} ${BASEDIR}/incr 2>> ${INCRLOGFILE}
else
#进行增备
innobackupex --defaults-file=${CONF} --user=${USER} --password=${PAWD} --incremental ${BASEDIR}/incr --incremental-basedir $LATEST_INCR 2>> ${INCRLOGFILE}
if [ -z "`tail -1 $INCRLOGFILE | grep 'completed OK!'`" ];then
echo "ERROR!incremental backup failed!" |tee -a ${INCRLOGFILE}
exit 1
fi
THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $INCRLOGFILE`
echo "incremental backup success to $THISBACKUP" |tee -a ${INCRLOGFILE}
fi
StopTime=`date +%Y%m%d_%H%M%S`
echo "Stop-Time :${StopTime}" |tee -a ${INCRLOGFILE}
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" |tee -a ${INCRLOGFILE}
else
echo "error"
fi
exit 0;
发表评论: