完全备份数据和差异备份数据的shell脚本
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,#!/bin/bash ## Description: 该脚本功能,以周为单位循环;周五实行完全备份,周六不备份,周日至周四实行差异备份;# 因工作需要,不实行压缩打包的方式
千家信息网最后更新 2025年12月01日完全备份数据和差异备份数据的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安全错误
数据库的锁怎样保障安全
如何建本地免流服务器
美国眼癌数据库
连接服务器失败无法开启找回手机
软件开发行业短信模板
台服冒险岛服务器
数据库编辑超链接
再读网络安全和信息化工作会议
软件开发工序审核思路
阿里云平台的服务器搭建
鲲鹏基础软件开发
网络安全专题教育活动记录
网络打鱼服务器
数据库王珊第十章课后作业答案
三国志怎么继承pk服务器
db2执行数据库查询命令
普法网警解读网络安全法
apex猎杀服务器
河北电信服务器ip地址云主机
三级数据库通过率如何
java 数据库 同步
通信管理局网络安全员试题
阿里云平台的服务器搭建
网络安全等级测评机构认证
杭州映谷网络技术有限公司
过滤正确身份证号数据 数据库
清河租房软件开发
微服务器安全吗
兰州家庭教育与网络安全视频
数据库前置库
河北通用服务器购买