千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,#!/bin/bash ## Description: 该脚本功能,以周为单位循环;周五实行完全备份,周六不备份,周日至周四实行差异备份;# 因工作需要,不实行压缩打包的方式
千家信息网最后更新 2026年10月31日完全备份数据和差异备份数据的shell脚本
#!/bin/bash ## Description: 该脚本功能,以周为单位循环;周五实行完全备份,周六不备份,周日至周四实行差异备份;#              因工作需要,不实行压缩打包的方式,采用cp完全备份,rsync差异备份;#              若要使用该脚本,请直接修改下面的两个参数:BackupPath和DATAPath,其他地方请不要修改;# DATE: 2017-04-24 22:43:00# MODIFY DATE: 2017-08-28 17:20:00  #     VERSION: 2.0#      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/# 指定备份路径 MountPath=//ds-bk01/drv-y# 指定windwos备份服务器共享路径DATAPath=/data/  # 需要备份的目录  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 's@[^/]+/?$@@g'`# 定义日志文件所在的目录DirFile=`ls $DATAPath`# 将备份路径下的文件及目录保存至变量DirFile中FirstFile="${BackupPath}${Host}_${Time}/`basename ${DATAPath}`/"  # 根据时间定义当前备份的目录OldFirstFile="${BackupPath}${Host}_$(date +%Y-%m-%d --date='7 days ago')"# 定义7天前的备份目录Mail_Group="test@aaa.com"    # 定义收件人username=user    # 定义挂载备份服务器的用户名password=password    # 定义挂载备份服务器的密码# 记录日志文件的开头部分Head() {[ ! -d $LogDir ] && mkdir $LogDirecho "[ 日文 ] このメッセ?ジはAB Linuxサ?バを介して、このメッセ?ジを介してs-smb01サ?バのデ?タバックアップを??するために送信されます。" > $LogFileecho "[ 中文 ] 这封邮件是通过AB的linux服务器发出来的,通过这封邮件来确认s-smb01服务器的数据备份情况!" >> $LogFile 2>&1echo  >> $LogFile 2>&1echo "---------------------The backup starts----------------------" >> $LogFile echo  >> $LogFile 2>&1echo "Start Backup $DATAPath $(date +"%y-%m-%d %H:%M:%S")"  >> $LogFile 2>&1 echo  >> $LogFile 2>&1echo "---------------------The backup starts----------------------"  >> $LogFile 2>&1 echo  >> $LogFile 2>&1echo  >> $LogFile 2>&1}# 日志的结束部分end(){echo  >> $LogFile 2>&1echo  >> $LogFile 2>&1echo "---------------------The backup ends ----------------------"  >> $LogFile 2>&1echo  >> $LogFile 2>&1echo " $DATAPath backup ends            $(date +"%y-%m-%d %H:%M:%S")"  >> $LogFile 2>&1echo  >> $LogFile 2>&1echo "---------------------The backup ends ----------------------"  >> $LogFile 2>&1}# 完全备份FullBackup(){echo "Today is week: `date +%a`, Start performing a full backups..." >> $LogFile 2>&1echo  >> $LogFile 2>&1echo  >> $LogFile 2>&1if [ -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>&1cd $DATAPathfor File in $DirFile; docp -a ${File}  $FirstFile  >> $LogFile 2>&1if [ $? -eq 0 ];thenecho "[ ${DATAPath}${File} ] Backup Success!`date`"  >> $LogFile 2>&1 fidoneelseif [ ! -d $FirstFile ];thenmkdir -pv $FirstFile  >> $LogFile 2>&1 cd $DATAPathfor File in $DirFile; docp -a ${File}  $FirstFile  >> $LogFile 2>&1 if [ $? -eq 0 ];thenecho "[ ${DATAPath}${File} ] Backup Success!`date`"  >> $LogFile 2>&1 fidoneelseecho "[ $DATAPath ]The Backup File is exists,Can't Backup!`date`"  >> $LogFile 2>&1 fifi   }# 差异备份DiffBackup() {echo "Today is week: `date +%a`, Start performing differential backups..." >> $LogFile 2>&1echo  >> $LogFile 2>&1echo  >> $LogFile 2>&1if [ -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}/./{} $FirstFileif [ $? -eq 0 ];thenecho "[ ${DATAPath}${File} ] Backup Success!`date`"  >> $LogFile 2>&1 fielse        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}/./{} $FirstFileif [ $? -eq 0 ];thenecho "[ ${DATAPath}${File} ] Backup Success!`date`"  >> $LogFile 2>&1 fi        else                echo "[ ${DATAPath} ]The Backup File is exists,Can't Backup!      `date`"  >> $LogFile 2>&1        fifi}# 日志开始部分Head# 判断是否挂载//ds-bk01/drv-y,如果没有则挂载,如果挂载不成功则退出脚本,并记录至日志文件mount | grep $MountPath >> $LogFile 2>&1if [ $? -eq 0 ];then        echo "[ $Host ] has successfully installed backup server shared directories: [ $MountPath ] to local: [ $BackupPath ] ... " >> $LogFile 2>&1        echo  >> $LogFile 2>&1else        echo "[ $Host ] does not mount a backup server shared directory: [ $MountPath ] ..."  >> $LogFile 2>&1        mount.cifs -o username=$username,password=$password,dir_mode=0777,file_mode=0777 $MountPath $BackupPath        if [ $? -eq 0 ]; then                echo "Mount successfully!" >> $LogFile 2>&1        else                echo "[ $Host ] failed to mount backup server shared directory: [ $MountPath ] to local: [ $BackupPath ] ..." >> $LogFile 2>&1                echo "Mount again, please!" >> $LogFile 2>&1                echo "The shell script has exited..." >> $LogFile 2>&1end                mail -s  "From [ $Host ] backup information [ $Time ]" $Mail_Group < $LogFile                exit 8        fifi# 备份策略的变量a=`date +%u`# 定义Today是星期几b=7 # 定义多少天循环一次完全备份和差异备份,这里定义为7天循环一次,如果要增大循环天数,请修改此处c=5# 这里5代表是周五完全备份,如果要改成周六完全备份,请修改为6,注意:c与d的值不能相同d=6# 定义每周6不备份数据,注意:c与d的值不能相同# 注意,下面的语句很重,判断Today是否大于$c,定义变量ago将采用不同的表达式计算if [ "$a" -gt "$c" ]; then  ago=$[ $a - $c ]# 定义Today离$c有多少天else  ago=$[ $a + $b - $c ]  # 定义Today离$c有多少天fid_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" ]; thenFullBackupelif [ "$a" -eq "$d" ]; thenecho "Today is Saturday 6, according to the backup strategy, today no data backup." >> $LogFile 2>&1elseDiffBackupfi# 日志结束部分end# 备份完成后发送邮件至指定邮箱mail -s  "From [ $Host ] backup information [ $Time ]" $Mail_Group < $LogFileexit 0
备份 日志 文件 目录 变量 服务器 服务 部分 差异 脚本 路径 邮件 文件名 时间 数据 成功 两个 主机 全局 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 中资互联网科技 广西互联网科技公司 哈尔滨新华互联网科技 互联网科技生活的内容 消费医药和互联网科技 健康食品互联网创新科技园项目 天津腾达互联网科技有限公司 深圳市罗太互联网科技有限公司 互联网科技大赛获奖感言 上海京穆互联网科技有限公司 互联网第三次科技革命特征 互联网企业科技类企业如何做账 互联网领先科技宣传片 江苏互联网智能科技软件 互联网科技年终奖 唯美互联网科技 美国五大互联网科技公司市值多少 数字互联网科技有限公司 承德科技产业互联网平台 广东猪兼强互联网科技有限公司 西安纸贵互联网科技有限公司 互联网最新的科技 互联网电商科技 成都互联网科技公司 万达互联网科技 四川慕妮娅互联网科技有限公司 湖北辰鑫科技互联网 马化腾互联网科技教学 好易买互联网科技
0