Mriabackup +shell脚本 ,实现全量,增量备份

脚本内容如下

说明: 本次备份设计为, 一周一次全量备份,6次增量备份

#!/bin/bash
#此脚本为mariadb备份脚本
#定义日志文件路径
log="/var/log/mariabackup.log"
#定义备份数据存放目录
bdir="/var/db/back"
#定义历史备份的打包路径
tdir="/var/db/tback"
#定义备份使用的命令
xbk="/usr/bin/mariabackup"
#定义备份使用的用户
user="root"
pass="123456"
#定义当前详细时间
DATE=`date +%Y-%m%d-%H%M`



#定义函数计算当前时间是周几,便于后面的判断执行,根据每天的日期对备份数据的命名,和备份方式进行选择
get_week()

{
date=`date +%Y%m%d`

year=`expr substr  $date 1 4`

month=`expr substr  $date 5 2`

day=`expr substr  $date 7 2`

b=`cal $month $year|wc -l`

b=`expr $b - 1`

week_day=`cal $month $year |awk '{for(i=1;i<=NF;i++){if($i=='$day'){if (NR=='$b'-1){print i-1}else{print 7-NF+i-1}}}}'`

echo $week_day

}

#定义完全备份函数
fullback_func () {
     

     echo "-------------------------- ${DATE} ----------------------------" >> ${log}
     #前一天时间
     ede=`date -d "-1 day" +%Y-%m%d-%H%M`
     
     #定义一个合并上周数据的function
     merge () {
        ${xbk} --prepare  --target-dir=${bdir}/${FULLBACK_NAME}
        for x in $(ls -1 -t -r ${bdir})
        do
             if [ $x -eq ${FULLBACK_NAME} ] ; then
                 continue
             fi
             ${xbk} --prepare --target-dir=${bdir}/${FULLBACK_NAME} --incremental-dir=${bdir}/${x} ||  echo "合并$x 发生错误" >>${log}
     
        done
     }
     
     #备份之前打包上周的备份数据
     if [ -d ${bdir}/${FULLBACK_NAME} ] ; then
     
        merge &>/dev/null && echo "${DATE} 合并上周数据完成" >>${log}
        if [ ! -d ${tdir} ] ; then
           mkdir  -p ${tdir}
        fi
        tar -zcf ${tdir}/${ede}.tar.gz ${bdir}/${FULLBACK_NAME} 
        rm -rf ${bdir}/*
     fi
     
     #创建备份目录进行全量备份
     mkdir -p ${bdir}
     $xbk --backup --target-dir=${bdir}/${FULLBACK_NAME} --user=${user} --password=${pass} && echo "进行一次完整备份 -- 周${DATE_WEEK}" >>${log}
     echo "-------------------------- ${DATE} ----------------------------" >> ${log}
}


#定义增量备份函数
incrback_func () {

echo "************************ ${DATE} **************************" >> ${log}
if [ -d ${bdir}/${LUBACK_NAME} ] ; then
      ${xbk} --backup --target-dir=${bdir}/${CUBACK_NAME} --incremental-basedir=${bdir}/${LABACK_NAME} --user=${user} --password=${pass} && echo "完成一次增量备份 -- 周${DATE_WEEK}" >>${log} || echo "第1次备份发生错误 -- ${week}" >> ${log}
else
      echo "${date} -- ${DATE_WEEK} -- 备份失败没有找到前一天备份"  >> ${log}
fi
echo "************************ ${DATE} **************************" >> ${log}

}


#调用时间计算函数结果放入一个变量中,记录当前日期为周几
DATE_WEEK=`get_week`

#判断日期为周几决定调用的备份函数
case  ${DATE_WEEK} in
1|2|3|4|5|6) 
   #此处定义增量备份的目录名,增量备份需要根据前一天的数据进行备份,所以采用数字命名,便于用变量加减,表示目录名称,当前日期减一就是前一天日期及目录名
   LABACK_NAME=`expr ${DATE_WEEK} - 1`
   CUBACK_NAME=${DATE_WEEK}
   incrback_func ;;

0) 
   #声明完整备份的目录名称
   FULLBACK_NAME=${DATE_WEEK}
   fullback_func ;;

*) echo "备份发生错误 -- ${DATE} -- 周${daweek}" >> ${LOG_MANLY} ;;

esac

最后编辑计划任务,指定每天的凌晨1点执行该脚本

crontab   -e 
0 1 * * * bash /tmp/mariaback/mariaback.sh >> /dev/null  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值