Linux数据备份Rsync+inotify+crontab+tar(一)

3 篇文章 0 订阅
2 篇文章 0 订阅

       linux下的数据备份软件繁多,各个应用方向和长处有所区别,本文系列要介绍的是完整的从增量备份的Rsync到定时tar压缩备份,所有实践过程均经过实践测试。

       首先来介绍一种简单有效的备份方式tar压缩备份,tar作为Linux下的标准压缩工具而存在,作为Linux入门的文件管理工具而存在。tar可以将大文件的文本压缩到自身原所占据空间的三分之一甚至更多(注:测试过纯文本文件压缩,后缀.tar.gz)。shell脚本配合tar作为完整定时备份工具的一种灵活形式存在,下面我们来上代码。

代码1(本机备份)

#/bin/bash  

#待备份文件目录
dir=/home/doc
#备份文件存放目录
saveDir=/home/pub

#写备份日志
echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) setting time backup start."
n=0
#按照时间排序读取文件名到数组filelist
for file in `ls -t  $saveDir`
do
filelist[$n]=$file
  n=`expr $n + 1`
done
echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) check backfile start."

for ((i=0;i<${#filelist[@]};i++))
do
 Time=$(date +%m/%d/%Y)
 Now=$(date +%H:%M:%S)
#超出4个则删除,因为按照时间排序过,所以会保存最近的4个备份
 if [ $i -ge 4 ];then
  echo "$Time $Now rm -rf $saveDir/${filelist[$i]}";
  rm -rf $saveDir/${filelist[$i]};
 else
  echo   "$Time $Now keep  $saveDir/${filelist[$i]}";
 fi
done

echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) compress documnet $dir start."
#核心代码
tar zcfP $saveDir/doc.$(date +%m.%d.%Y.%H.%M).tar.gz $dir
echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) compress documnet $dir end."


       以上脚本的核心代码是比较简单的,不过通常来说我们做定时备份一般会保留最近的几个备份文件,所以tar备份的关键部分还应该包括备份保存策略,值就是那两个for循环完成的工作。
     但是,在一个成熟的企业通常情况下会设置专门用于备份带有大容量硬盘的Linux服务器,如果没有足够的机器来实现的情况下可以采用一个机器不同硬盘来存储备份数据可以直接参照上面的代码来实现。这种情况下的备份工作就需要在两台机器之间传递文件,会涉及免密码登录等相关问题。下面我们先介绍免Linux服务器之间免密码登录的实现过程,然后在介绍两机器之间的备份的实现代码。
       服务器与客户机方的免密码登录是通过密钥公钥原理来实现的,通过一系列配置最终实现两台机器之间相同账号免密码登录,不过在维护力量有限的情况下不建议root机器免密码登录,不过此处备份案例还是要用root来实现。,以防止出现一台机器被攻破,所有机器变瘫痪烦的恶劣情况出现。第一步要在客户机(此处客户机指的是存放待备份数据的服务器,服务器指备份数据专用Linux服务器)生成密钥, 命令如下:
      ssh-keygen -t rsa  
        一步步点击回车完成秘钥生成。在此过程会提示密钥文件存放的目录,回车默认即可,中间会要求你输入密码,我们是免除密码登录,所以我们这里不输入密码。生成完密钥之后可以通过  scp + ssh将密钥文件发送到服务器。登陆服务器(Linux备份专用机器),然后把客户机上生成名为id_rsa.pub密钥文件发送到服务器那边的/root/.ssh/目录下,把id_rsa.pub文件内容添加到authorized_keys文件中,命令如下:
cat id_rsa.pub >>authorized_keys
更多免密码登录设置参考文章: http://blog.csdn.net/21aspnet/article/details/8115134
     
设置tar备份的核心代码
tar zcf - $dir | ssh $backhost "cat>$saveDir/bio.$(date +%m.%d.%Y.%H.%M).tar.gz"  
远程定时备份完整shell脚本

#/bin/bash  

#dir=/home/snp/data
dir=/home/duanhy/bio
saveDir=/home/duanhy/TECH
backhost=192.168.0.13

echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) setting time backup start."
n=0
#查看远程服务器上备份目录文件,按照时间排序读取到数组 filelist
for file in `ssh $backhost ls -t  $saveDir`
do
  filelist[$n]=$file
  n=`expr $n + 1`
done

echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) check backfile start."

for ((i=0;i<${#filelist[@]};i++))
do
 Time=$(date +%m/%d/%Y)
 Now=$(date +%H:%M:%S)
 # echo "$i ${filelist[$i]}"
 if [ $i -ge 4 ];then
  echo "$Time $Now rm -rf $saveDir/${filelist[$i]} from $backhost";
#远程删除
  ssh $backhost rm -rf $saveDir/${filelist[$i]};
 else
  echo   "$Time $Now keep  $saveDir/${filelist[$i]} keep $backhost";
 fi
done

echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) compress documnet $dir start."
# tar zcfP pub/doc.$(date +%m.%d.%Y.%H.%M).tar.gz $dir
#核心备份代码
tar zcf - $dir | ssh $backhost "cat>$saveDir/bio.$(date +%m.%d.%Y.%H.%M).tar.gz"  
echo "$(date +%m/%d/%Y) $(date +%H:%M:%S) compress documnet $dir end."


    以上为tar本地备份与远程备份策略的shell脚本的实现,下面将介绍实时rsync+inotify备份脚本的实现。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值