完全备份数据和差异备份数据的shell脚本

#!/bin/bash 
#
# Description: 该脚本功能,以周为单位循环;周五实行完全备份,周六不备份,周日至周四实行差异备份;
#              因工作需要,不实行压缩打包的方式,采用cp完全备份,rsync差异备份;
#              若要使用该脚本,请直接修改下面的两个参数:BackupPath和DATAPath,其他地方请不要修改;
#	 DATE: 2017-04-24 22:43:00
# MODIFY DATE: 2017-04-28 10:00:00  
#     VERSION: 1.1
#      Author: xixi_chan

# 导入PATH环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/bin:/sbin:/root/bin

# 重新定义IFS变量避免目录或文件名存在空格时被分割
IFS=`echo -en "\n\b"`

# 定义全局变量
BackupPath=/mnt/backup_data/				# 指定备份路径 
DATAPath=/data/ac-cnc/  			# 需要备份的目录  
Time=`date +%Y-%m-%d`					# 定义Today的时间变量
Host=`echo $HOSTNAME | awk -F‘.‘ ‘{print $1}‘`		# 定义主机名
LogFile="/var/log/${Host}/${Host}_${Time}.log"  	# 定义日志文件名称
LogDir=`echo "$LogFile" | sed -r ‘[email protected][^/]+/[email protected]@g‘`	# 定义日志文件所在的目录
DirFile=`ls $DATAPath`					# 将备份路径下的文件及目录保存至变量DirFile中
FirstFile="${BackupPath}${Host}_${Time}/`basename ${DATAPath}`/"  		# 根据时间定义当前备份的目录
OldFirstFile="${BackupPath}${Host}_$(date +%Y-%m-%d --date=‘7 days ago‘)"	# 定义7天前的备份目录

# 记录日志文件的开头部分
Head() {
[ ! -d $LogDir ] && mkdir $LogDir
echo "---------------------The backup starts----------------------" > $LogFile 
echo  >> $LogFile 2>&1
echo "Start Backup $DATAPath		 $(date +"%y-%m-%d %H:%M:%S")"  >> $LogFile 2>&1 
echo  >> $LogFile 2>&1
echo "---------------------The backup starts----------------------"  >> $LogFile 2>&1 
echo  >> $LogFile 2>&1
echo  >> $LogFile 2>&1
}

# 完全备份
FullBackup(){
echo "Today is week: `date +%a`, Start performing a full backups..."
echo  >> $LogFile 2>&1
echo  >> $LogFile 2>&1

if [ -d $OldFirstFile ];then     
	rm -rf $OldFirstFile  >> $LogFile 2>&1      
	echo "[ $OldFirstFile ] Delete Old File Success!	`date`"  >> $LogFile 2>&1
	[ ! -d $FirstFile ] && mkdir -pv $FirstFile   >> $LogFile 2>&1
	cd $DATAPath
	for File in $DirFile; do
		cp -a ${File}  $FirstFile  >> $LogFile 2>&1
		if [ $? -eq 0 ];then
			echo "[ ${DATAPath}${File} ] Backup Success!	`date`"  >> $LogFile 2>&1 
		fi
	done
else
	if [ ! -d $FirstFile ];then
		mkdir -pv $FirstFile  >> $LogFile 2>&1 
		cd $DATAPath
		for File in $DirFile; do
			cp -a ${File}  $FirstFile  >> $LogFile 2>&1 
			if [ $? -eq 0 ];then
				echo "[ ${DATAPath}${File} ] Backup Success!	`date`"  >> $LogFile 2>&1 
			fi
		done
	else
		echo "[ $DATAPath ]The Backup File is exists,Can‘t Backup!	`date`"  >> $LogFile 2>&1 
	fi

fi   
}

# 差异备份
DiffBackup() {
echo "Today is week: `date +%a`, Start performing differential backups..."
echo  >> $LogFile 2>&1
echo  >> $LogFile 2>&1

if [ -d $OldFirstFile ];then
        rm -rf $OldFirstFile  >> $LogFile 2>&1
        echo "[ $OldFirstFile ] Delete Old File Success!        `date`"  >> $LogFile 2>&1
        [ ! -d $FirstFile ] && mkdir -pv $FirstFile   >> $LogFile 2>&1
        rsync --dry-run -racnC --out-format="%n"  $DATAPath $d_dir | grep -v "/$" | xargs -I{} rsync -R -a -z ${DATAPath}/./{} $FirstFile
	if [ $? -eq 0 ];then
		echo "[ ${DATAPath}${File} ] Backup Success!	`date`"  >> $LogFile 2>&1 
	fi
else
        if [ ! -d $FirstFile ];then
               mkdir -pv $FirstFile  >> $LogFile 2>&1
               rsync --dry-run -racnC --out-format="%n"  $DATAPath $d_dir | grep -v "/$" | xargs -I{} rsync -R -a -z ${DATAPath}/./{} $FirstFile
    		    if [ $? -eq 0 ];then
    			   echo "[ ${DATAPath}${File} ] Backup Success!	`date`"  >> $LogFile 2>&1 
    		    fi
        else
                echo "[ ${DATAPath} ]The Backup File is exists,Can‘t Backup!      `date`"  >> $LogFile 2>&1
        fi

fi
}

# 日志的结束部分
end(){
echo  >> $LogFile 2>&1
echo  >> $LogFile 2>&1
echo "---------------------The backup ends ----------------------"  >> $LogFile 2>&1 
echo  >> $LogFile 2>&1
echo " $DATAPath backup ends            $(date +"%y-%m-%d %H:%M:%S")"  >> $LogFile 2>&1
echo  >> $LogFile 2>&1
echo "---------------------The backup ends ----------------------"  >> $LogFile 2>&1 
}

a=`date +%u`	# 定义Today是星期几
b=7 		# 定义多少天循环一次完全备份和差异备份,这里定义为7点循环一次,如果要增大循环天数,请修改此处
c=5		# 这里5代表是周五完全备份,如果要改成周六完全备份,请修改为6
d=6		# 定义每周6不备份数据
ago=$[ $a + $b -$c ]	# 定义Today离$c有多少天
d_dir=${BackupPath}${Host}_$(date +%Y-%m-%d -d "`echo $ago` days ago")/`basename ${DATAPath}`/
#date +%Y-%m-%d -d "`echo $ago` days ago" 

# 定义备份策略
if [ "$a" -eq "$c" ]; then
	Head
	FullBackup
	end
elif [ "$a" -eq "$d" ]; then
	Head
	echo "Today is Saturday 6, according to the backup strategy, today no data backup." >> $LogFile 2>&1
	end
else
	Head
	DiffBackup
	end
fi

# 备份完成后发送邮件至指定邮箱
Mail_Group="[email protected] [email protected]"
mail -s  "From $Host backup information" $Mail_Group < $LogFile
exit 0
时间: 2024-08-09 02:02:17

完全备份数据和差异备份数据的shell脚本的相关文章

【SQL Server备份恢复】维护计划实现备份:每周数据库完整备份、每天差异备份、每小时日志备份

原文:[SQL Server备份恢复]维护计划实现备份:每周数据库完整备份.每天差异备份.每小时日志备份 在数据库管理中,数据库备份是非常重要的. 通过维护计划向导,可以很方便的完成数据库备份. 下面的例子说明了如何实现数据库的备份,具体的备份策略是:每周日一次完整备份.每天差异备份(除周日外).每小时日志备份. 此外,还可以指定删除过期备份策略,比如,把10天前的备份删除,因为硬盘空间是有限的. 1. 2. 3. 4.这里你可以自定义名称,这里用了默认的MaintenancePlan,另外选择

sqlServer数据库备份与还原——差异备份与还原

1.差异备份 是完整备份的补充 备份自上次完整备份以来的数据变动的部分 2.备份过程: 在做差异备份之前需要先进行完整备份.完整备份的过程见:https://i.cnblogs.com/EditPosts.aspx?postid=10322955 差异备份与完整备份过程类似,只是备份类型选为差异备份 3.还原过程: 在进行差异还原的时候先要进行完整备份还原,但是要注意要选择上以下两个对勾,否则会报错. 不要着急点击确定,在选项中选中覆盖现有数据库,同时在恢复状态处选择第二个. 点击确定后,可以看

SQL Server差异备份的备份/还原原理

SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异 备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最后LSN(Last LSN) 如果完整备份之后无对数据库做过修改,那么差异备份就没有意义了 2-做差异备份时根据差异位图读取差异页面内容 注意:差异位图记录了自从最后一次完整备份以来数据库中有变化的页面,这样在做差异备份时候就不用扫全库页面,只需要读取有差异的页面 3-在备份之前,数据库会做一次检查点,

SQLSERVER 差异备份、全备份

--exec BackUPDatabase_LeeHG语句参数说明: -- 示例:exec BackUPDatabase_LeeHG '参数一','参数二','参数三','参数四','参数五',' 参数六' -- 参数一:需要备份数据库的名称 -- 参数二:备份文件存放路径,可以是网络路径 -- 参数三:全备份时间 -- 参数四:全备份时间误差范围(小时) -- 参数五:参数三为网络路径时,访问网络路径的用户名,参数三为本地路径时可输入任意字符. -- 参数六:参数三为网络路径时,访问网络路径的

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件 shell脚本如下echo "%CPU,%MEM" > cpu_test.csvpid=1 #Can be change by yourselfwhile true do top -bn1 -n 1 -p $pid | tail -1 | awk '{ print $9,$10 }' | sed 's/ /,/' >> cpu_test.csv sleep 2 #delay timedone 脚

看完,你就理解什么是数据的全量、增量、差异备份了

在很远很远的地方,有一个帐房先生. 他每天要记很多很多的账单. 老先生一生谨慎,为了保证账本的安全, 便找来三个徒弟帮忙来对账本做备份, 这样即使账本丢失了, 也可以用备份的账本继续使用. 三个徒弟各有所长,分别采用了不同的做法: 大徒弟▼ 性格宅心仁厚,成熟稳重. 他采用的方式是每天都把师父的账单重新抄录一份.这样做的好处就是每天都是一份完整的账本,每一个备份的账本都可以直接使用,坏处则是每天要花费很多时间去进行记录,并且需要很多纸.墨水以及存账本的柜子. 二徒弟▼ 性格聪明伶俐,人小鬼大.

大数据产品的备份及恢复

Hbase Distcp方式 整体下载上传方式 CopyTable备份 Export工具 elasticsearch 建立备份快照数据挂载点 建立快照仓储repository 建立snapshot快照备份 恢复snapshot快照数据 原集群恢复 新集群恢复 HDFS Hbase的备份恢复 hbase数据备份策略有两类: 离线备份(关闭Hbase集群进行全备份,包括distcp方式.整体下载上传) 在线备份(在线对集群进行备份,存在数据丢失的风险) 进行离线备份时,必须全部关闭Hbase集群,或

通过rsync+inotify实现数据的实时备份

我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首

通过rsync+inotify实现数据的实时备份 【转载】

   在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.  随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中