Linux SVN服务器做定时增量备份脚本

原创 2015年07月08日 15:35:57

Linux SVN服务器做定时备份脚本:


      SVN 主服务器:

      新建一个目录 :/root/svn/

      下面增加一个脚本:add_backed.sh

      脚本内容:

    

#!/bin/bash
#set -x
#function:SVN增量备份

#Author: wangmuming

svn_repos="/data/svndata/companyname"  #版本库

backup_dir="/usr/svn/backup" #nfs挂载从服务器192.168.1.x的目录

next_backup_file="add_incremental_backup".`date +%Y%m%d`  #增量备份文件

log="$backup_dir/last_add_backed_up.log"   #日志文件

repo="$backup_dir/svn.txt"   #记录版本库最新版本

echo "********************"`date`"***************">> $log

if [ -f $repo ];then
   echo " $repo 文件存在!" >> $log 
else
  echo " $repo 文件不存在!" >> $log 
  touch  $repo
  echo "0">$repo #从0开始备份
fi

echo "SVN ADD DUMP start!">> $log

first_rev="`cat $repo`"  #备份起点
last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`" #注服务器版本库最新版本

backup_repo="$backup_dir/slave.txt"

if [ -f $backup_repo ];then
   echo " $backup_repo 文件存在!" >> $log 
else
  echo " $backup_repo 文件不存在!" >> $log 
  touch $backup_repo
  echo "0">$backup_repo #第一次 从0开始
fi

slave_rev=`cat  $backup_repo`  #从服务器提供的校验版本

if [ $first_rev  -ne $slave_rev ];then

  #echo "SVN Slaves is error, please check. " | mail -s "SVN slave is ERROR! first_rev !== slave_rev"      #主服务器备份起点版本和从数据最后版本不一致,则邮件报警
  echo  "SVN Slaves is error, please check. "

else

     if [ $first_rev -le $last_rev ];then
       /usr/local/subversion/bin/svnadmin dump --incremental --revision $first_rev:$last_rev $svn_repos > $backup_dir/$next_backup_file  #上一次记录的版本,到最新版本的增量备份
     else
	  echo " no update record!" >> $log
          rm -rf $backup_dir/access.conf
          rm -rf $backup_dir/auth.conf
          cp $svn_repos/access.conf  $backup_dir/
          cp $svn_repos/auth.conf  $backup_dir/
          exit 0 
     fi

fi

echo "Fist:$first_rev">> $log

echo "Last:$last_rev">> $log #写入日志文件

#dump_rev="`/usr/bin/expr $last_rev+1`" #下一次备份起点,重点 +1版本,否则报错
dump_rev=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`

echo $dump_rev>$repo  #覆盖上一次备份起点

#删除之前的增量备份文件

rm -rf $backup_dir/add_incremental_backup.$(date +%Y%m%d --date='1 days ago')

rm -rf $backup_dir/access.conf
rm -rf $backup_dir/auth.conf
cp $svn_repos/access.conf  $backup_dir/
cp $svn_repos/auth.conf  $backup_dir/

    增加定时任务:crontab –e

  //每天的1点十分执行一次  这个看公司需求 具体的可以设置为多少分钟一次都是可以的

    


  SVN从服务器:

新建一个目录 :/root/svn/

      下面增加一个脚本:load_backed.sh

      脚本内容:

      

#!/bin/bash
#set -x
#function:SVN增量导入

#Author: wangmuming

svn_repos="/data/svndata/companyname" #从服务器192.168.1.*版本库目录

backup_dir="/usr/svn/backup" #nfs共享主服务器目录

backup_file="add_incremental_backup".`date +%Y%m%d`  #增量备份文件

log="$backup_dir/last_load.log" #日志文件

echo "********************"`date`"***************">> $log

echo "SVN load start!">> $log

first_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"

echo "First:$first_rev">> $log

if [ -f $backup_dir/$backup_file ];then

  /usr/local/subversion/bin/svnadmin load $svn_repos < $backup_dir/$backup_file 2>&1 >>$log #导入增量备份文件

else
  echo " $backup_dir/$backup_file 文件不存在! no dump to load!" >> $log 
  exit 0
fi

last_rev="`/usr/local/subversion/bin/svnlook youngest $svn_repos`"

echo "Last:$last_rev">> $log #记录最新版本号

#repo_slave=$last_rev+1 #作为检测主服务器和从服务器数据是否同步的判断数据
repo_slave=`awk "BEGIN{a=$last_rev;b="1";c=(a+b);print c}"`

echo "$repo_slave">$backup_dir/slave.txt

echo "********************"`date`"***************">>$log

#删除增量备份文件

rm -rf $backup_dir/add_incremental_backup.*

echo "SVN load Eed!">> $log

    

 增加定时任务:crontab –e

     30 4 * * * /bin/sh /root/svn/load_backed.sh //将主服务器上的导出内容导入到备份的SVN服务器上

       注意:这个导入的时间点要晚与导出的时间段;


在备份的SVN服务器上设置一个文件共享服务:

            

 # cat /etc/exports 
           /usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)

# cat /etc/exports 

    /usr/svn/backup *(insecure,rw,sync,no_root_squash,no_all_squash,fsid=0)

   启动文件共享服务:

        service nfs start

  SVN主服务器:

           mount  IP:/usr/svn/backup  /usr/svn/backup

   /usr/svn/backup 目录内容:

    

-rw-r--r-- 1 root root      17058 7月   8 01:14 last_add_backed_up.log
-rw-r--r-- 1 root root    6704579 7月   8 04:30 last_load.log
-rw-r--r-- 1 root root          5 7月   8 04:30 slave.txt
-rw-r--r-- 1 root root          5 7月   8 01:14 svn.txt

     到此,基于Linux SVN的服务器之间的备份完成。


CentOS下SVN服务器的安装、全量备份、增量备份的配置及分析、数据存储文档

前言:SVN(Subversion)是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。         一、SVN的体系结构:         ...

Linux下SVN的三种备份方式

   (本文例子基于FreeBSD/Linux实现,windows环境请自己做出相应修改)   配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏、误操作造成数据无法恢复的灾难性后果。因此...

svn 完全备份、增量备份、同步版本库

版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份和同步版本库...

linux自动备份shell(使用全备份,增量备份策略)

zz http://www.cnblogs.com/coffee_cn/archive/2010/03/26/1697038.html 在cron里设置,每周一凌晨2点执行(每周一全备份...
  • orzorz
  • orzorz
  • 2012年08月20日 06:51
  • 1789

shell写的数据备份,增量备份,完整备份

  ...

Linux下实现增量备份文件

之前在使用windows server做文件备份的时候,经常使用SyncFolders来实现文件的增量备份。现在公司的备份服务器换成centos系统,想要实现增量备份就想到了rsync。但是之前在学习...

SVN:利用svnsync定时单向备份同步版本库

1. 前言 SVN部署好了之后,备份又是个问题。这里选择svnsync工具进行备份。 从centos上的源库备份到Windows server2012 服务器中。 2. 实施过程 2.1 目标服务器s...

每隔10秒自动更新svn 定时更新svn 脚本

任务: */1 * * * * /opt/adobe/fms/webroot/api/svn.sh 这个命令的问题:只更新了版本号,没有更新实际内容,但是直接运行上面shell脚本能更新。...
  • elesos
  • elesos
  • 2016年08月11日 21:25
  • 966

SVN版本库的备份、还原、移植(初级篇、中级篇和高级篇)

初级篇:        版本库数据的移植:svnadmin dump、svnadmin load导出:$svnlook youngest myrepos //查看到目前为止最新的版本号$svnadmi...

CentOS下SVN服务器的安装、全量备份、增量备份的配置及分析、数据存储文档

前言:SVN(Subversion)是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。         一、SVN的体系结构:         ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux SVN服务器做定时增量备份脚本
举报原因:
原因补充:

(最多只允许输入30个字)