按月全量备份/按天增量备份 脚本
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