使用shell脚本备份文件实现异地备份并校验文件(一)

整套需求,需要备份代码机代码并同步到异地备份服务器,最后备份服务器需要判断备份文件是否正常,代码机的数据是否和备份机的数据正常。

实现思路:
1.首先实现备份数据。
2.将数据同步到异地备份服务器。
3.文件校验,可以使用md5来实现(将原数据的md5值同步到异地然后进行校验)。

文件备份脚本如下:
执行脚本之前需要注意几个事项,
1.异地备份服务器和本地代码机需要安装rsync服务
2.异地备份服务器需要配置rsync服务,一个备份数据存放目录,一个是日志文件存放目录(日志内有md5值,需要做校验用。)
3.rsync的密码文件权限必须为600,要不会同步失败

#!/bin/bash
#author: wys
#date: 20190410
#common: 备份服务器代码文件
########################################
##备份命令: sh 脚本名称+文件路径+文件名称###
########################################
set -e
source /etc/bashrc
#获取本机ip地址(云服务器需要手动配置IP地址,需要根据实际环境确认IP是否正确)
#IP=$(/sbin/ip addr |grep inet |grep -v inet6 |grep em1|awk '{print $2}' |awk -F "/" '{print $1}')
IP=x.x.x.x
work_dir=$1
file_name=$2
backup_dir=备份路径
date=$(date "+%Y%m%d")  ##获取系统时间

#判断work_dir和file_name是否为空:
if [[ ! -n "$work_dir" || ! -n "$file_name" ]] ;then
  echo "ERROR:work_dir或file_name参数为空"
  echo "commd:sh file_backup.sh work_dir file_name;两个参数都为必填参数)"
  exit
else

#Log存放路径
LogFile=$backup_dir/log/${IP}_${file_name}_${date}.log

if [ ! -d '$backup_dir/log' ]; then
    mkdir -p $backup_dir/log
fi
#新建日志文件
touch $LogFile

#追加日志到日志文件
echo "start backup, start at  $(date +"%Y-%m-%d %H:%M:%S")" > $LogFile
echo "-------------------Start!---------------------------------" >> $LogFile

if [ ! -d '$backup_dir/$file_name' ]; then
    mkdir -p $backup_dir/$file_name
fi

#备份文件
echo "备份相关文件 $file_name" >> $LogFile
echo "tar czf ${backup_dir}/${file_name}/${file_name}_${date}.tar.gz --exclude=不需要备份的文件可以使用此参数过滤掉 -C $work_dir $file_name" >> $LogFile
tar czf ${backup_dir}/${file_name}/${file_name}_${date}.tar.gz -C $work_dir $file_name
if [ $? -eq 0 ];then  ##判断命令是否执行即数据是否备份成功
  echo "Backup_Status="SUCCESS"" >> $LogFile
else
  echo "Backup_Status="FAILED"" >> $LogFile
fi
##查看备份文件大小
Bar_Size=`du -sh $backup_dir/$file_name/${file_name}_${date}.tar.gz |awk '{print $1}'`
##获取备份文件的md5值
MD5=`/usr/bin/md5sum $backup_dir/$file_name/${file_name}_${date}.tar.gz | awk '{print $1}'`
echo "备份文件路径:$backup_dir/$file_name/${file_name}_${date}.tar.gz" >> $LogFile
echo "文件大小:${Bar_Size}">> $LogFile
echo "MD5: $MD5" >> $LogFile
echo "-----------------------------------------------------" >> $LogFile

###备份文件需要定时清理,要不会导致磁盘爆满。
###备份数据保留5天(保留时间可根据需求自行修改)
find $backup_dir/$file_name/ -mtime +5 -name "*.tar.gz" -exec rm -rf {} \;
###日志文件保存3天(保留时间可根据需求自行修改)
find $backup_dir/log -mtime +3 -name "*.log" -exec rm -rf {} \;

#备份完成追加日志到日志文件
    echo "-----------------------------------Complete!----------------------------------------" >> $LogFile
    echo "backup end, end at  $(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile

##同步备份文件到备份服务器
echo "start rsync,$(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
rsync -rauvt --progress --password-file=/data/scripts/backup.pass --bwlimit=500 $backup_dir/$file_name/${file_name}_${date}.tar.gz backup@异地备份服务器的ip::backup/$IP/$file_name/
if [ $? -eq 0 ];then
  echo "Rsync_Status="SUCCESS"" >> $LogFile
  echo "rsync end,$(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
else
  echo "Rsync_Status="FAILED"" >> $LogFile
  echo "rsync end,$(date +"%Y-%m-%d %H:%M:%S")" >>  $LogFile
fi
##拷贝日志文件到远程服务器
rsync -rauvt --progress --password-file=/data/scripts/backup.pass $LogFile backup@异地备份服务器的ip::logs
fi

执行命令如需要备份/data/www下的code目录:
sh back_files.sh /data/www code
切记脚本运行前需要测试是否正常运行,要不导致数据备份失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值