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

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的服务器之间的备份完成。


你可能感兴趣的:(linux,SVN)