按月全量备份/按天增量备份 脚本

backup.sh 月初全量备份,之后按天增量备份。建议将历年附件等归档内容下载备份后,线上不再备份此数据。每月备份目录可自动上传到OSS中。

    #!/bin/bash
    
    # 整站文件按月备份并同步到oss
    # 按天增量备份
    # /web仅保存增量备份
    
    tar=/bin/tar
    projectPath=/web_lv/
    project=folderName
    #增量备份存放位置
    bakPath=/web/site/"$project"
    #全量备份存在位置
    fullPath=/web_lv/full_bak
    
    ym=`date +%Y%m`
    ymd=`date +%Y%m%d`
    nowMonth=`date +%Y%m01`
    last=`date -d"$nowMonth last month" +%Y%m`
    monthBakPath=$fullPath/$ym
    gidShot=Gid$project$ym
    fullName=$ym
    dailyName=$ymd
    log=$bakPath/$project.log
    
    chk_month()
    {
      if [ -e "$monthBakPath"/"$project"_"$ym"_month.tar.gz ];then
        echo ""$project"_"$ym"_month.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$log
      else
        tar_month
      fi
    }
    
    chk_daily()
    {
      while [ -e "$bakPath"/"$ym"/"$project"_"$dailyName"_daily.tar.gz ]
        do
          dailyName=`echo "$dailyName + 0.1" | bc `
        done
    }
    
    #增量备份
    tar_daily()
    {
      cd $projectPath
      echo "START=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$dailyName"_daily.tar.gz" >> $log
      sleep 3
      $tar -g $fullPath/$gidShot -zcf $bakPath/$ym/"$project"_"$dailyName"_daily.tar.gz --exclude=runtime --exclude=app --exclude=sensen --exclude=vendor --exclude=public/tmp --exclude=public/uploads/tmp --exclude=public/uploads/attach/2021 $project
      echo "END========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$dailyName"_daily.tar.gz" >> $log
    }
    
    #全量备份
    tar_month()
    {
      touch $fullPath/$gidShot
      cd $projectPath
      echo "START=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullName"_month.tar.gz" >> $log
      $tar -g $fullPath/$gidShot -zcf $monthBakPath/"$project"_month.tar.gz --exclude=runtime --exclude=app --exclude=sensen --exclude=vendor --exclude=public/tmp --exclude=public/uploads/tmp --exclude=public/uploads/attach/2021 $project
      echo "END========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullName"_month.tar.gz" >> $log
    }
    
    # 废弃方法,直接将全量及增量数据备份到指定目录
    move_full()
    {
      echo "start----move" >> $log
      mv -f $monthBakPath/"$project"_month.tar.gz /web/site/full/
      echo "end----move" >> $log
    }
    
    backup()
    {
      if [ -d $monthBakPath ]; then
        #chk_month
        chk_daily
        tar_daily
      else
        #delete last month
        echo "start----delete last month data" >> $log
        rm -rf $bakPath/$last
        rm -rf $fullPath/*
        mkdir -p $fullPath/$ym
        mkdir -p $bakPath/$ym
        tar_month
        #move_full
      fi
    }
    
    if [ -d $bakPath ];then
      backup
    else
      mkdir -p $bakPath
      backup
    fi

Tags: 脚本

添加新评论