svn dump 全自动备份脚本

转载 2016年05月30日 11:16:11


原文:http://carywu.blog.51cto.com/13185/207571
最近要给美国的SVN服务器做升级,由于这台服务器有一定年份了,在本公司也算是个三朝元老,保存了多少code啊!。为了保险起见,老板将迁移的工作郑重的交到我的手上。在欣欣然的同时也颤抖着。
不过还好我已经对其轻车熟路,在新的服务器上安装好apache和subversion软件后,开始着手备份与迁移了。
由于旧服务器版本太低,没有svnsync的功能,考虑再三,我选择使用了svnadmin dump去做备份。
可是有一个问题了,每个库的版本都有几万了,然后服务器上有十几个库,我可没耐心一个个输入svnadmin dump去备份它们,那会让我觉得长夜漫漫,难于睡眠!
管理员的最高境界就是花力气去懒惰,我很向往这个境界。所以,我花了些时间写了个shell,就让系统自己去干这些事情吧!

shell功能:
只需要大家修改源库所在的目录,和备份存放的目录就可以了。
第一次运行会全部备份,然后以后每次运行会增量备份。
所以,恢复的时候,先恢复全部备份,然后依次按照日期恢复增量备份即可。


#!/bin/sh

#########################################################
# this script is used for svn repository backup
# written: carywu
# date: 2008/11/21
#########################################################

###################################
# mail address for status updates
#  - This is used to email you a status report
###################################
MAILADDR=carywu@yahoo.cn

###################################
# backup directory,please change it
# - This is the path to the backup directory
###################################
BACKUPDIR=/svnroot/svnback

###################################
# svn repository directory, please change it.
# - This is the path to the directory you want to archive
###################################
SVNDIR=/svnroot/repository

###################################
# HOSTNAME and project list
#  - This is also used for reporting
###################################
ProjectLst=$BACKUPDIR/projectlist.txt

###################################
# svn backup log path and date
#  - This is used to log result
###################################
LogFile=$BACKUPDIR/svnback.log
DATE=`date +%Y%m%d-%T`
###################################
# svn command path
# - This is the path to the directory you want to archive
###################################
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# our actual rsyncing function
do_accounting()
{
        echo " " >> $LogFile
        echo " " >> $LogFile
        echo "###########################" >> $LogFile
        echo "$DATE" >> $LogFile
        echo "###########################" >> $LogFile
        cd $BackDir
}

do_svndump()
{
   PROJECTLIST=`cat $ProjectLst`
   cd $SVNDIR
   for project in $PROJECTLIST
          do
          echo "begin to dump $project databases" >> $LogFile
                if [ ! -f $BACKUPDIR/$project.dump ]
                then
                YOUNGEST=`svnlook youngest $project`
                svnadmin dump $project > $BACKUPDIR/$project.dump
                echo "OK,dump file successfully!!"
                echo "$YOUNGEST" > $BACKUPDIR/$project.youngest
                else
                        echo "$project.dump existed,will do increatment job" >> $LogFile
                        if [ ! -f $BACKUPDIR/$project.youngest ]
                        then
                        echo "error, no youngest check!" >> $LogFile
                        else
                                PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
                                NEWYOUNGEST=`svnlook youngest $project`
                                if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]
                                then
                                        echo " no database updated!" >> $LogFile
                                else
                                        LASTYOUNGEST=`expr $PREVYOUNGEST + 1`
                                        echo "last youngest is $LASTYOUNGEST" >> $LogFile
                                        svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE
                                        echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest
                                fi
                        fi
  fi
        done
}

# our post rsync accounting function
do_mail()
{
   mail $MAILADDR -s svn-back_log < $LogFile
}
# some error handling and/or run our backup and accounting
do_accounting && do_svndump && do_mail


#########################################################
# this script is used for svn repository backup
# written: carywu
# date: 2008/11/21
#########################################################

###################################
# mail address for status updates
#  - This is used to email you a status report
###################################
MAILADDR=carywu@yahoo.cn

###################################
# backup directory,please change it
# - This is the path to the backup directory
###################################
BACKUPDIR=/svnroot/svnback

###################################
# svn repository directory, please change it.
# - This is the path to the directory you want to archive
###################################
SVNDIR=/svnroot/repository

###################################
# HOSTNAME and project list
#  - This is also used for reporting
###################################
ProjectLst=$BACKUPDIR/projectlist.txt

###################################
# svn backup log path and date
#  - This is used to log result
###################################
LogFile=$BACKUPDIR/svnback.log
DATE=`date +%Y%m%d-%T`
###################################
# svn command path
# - This is the path to the directory you want to archive
###################################
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# our actual rsyncing function
do_accounting()
{
        echo " " >> $LogFile
        echo " " >> $LogFile
        echo "###########################" >> $LogFile
        echo "$DATE" >> $LogFile
        echo "###########################" >> $LogFile
        cd $BackDir
}

do_svndump()
{
   PROJECTLIST=`cat $ProjectLst`
   cd $SVNDIR
   for project in $PROJECTLIST
          do
          echo "begin to dump $project databases" >> $LogFile
                if [ ! -f $BACKUPDIR/$project.dump ]
                then
                YOUNGEST=`svnlook youngest $project`
                svnadmin dump $project > $BACKUPDIR/$project.dump
                echo "OK,dump file successfully!!"
                echo "$YOUNGEST" > $BACKUPDIR/$project.youngest
                else
                        echo "$project.dump existed,will do increatment job" >> $LogFile
                        if [ ! -f $BACKUPDIR/$project.youngest ]
                        then
                        echo "error, no youngest check!" >> $LogFile
                        else
                                PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
                                NEWYOUNGEST=`svnlook youngest $project`
                                if [ $PREVYOUNGEST -eq $NEWYOUNGEST ]
                                then
                                        echo " no database updated!" >> $LogFile
                                else
                                        LASTYOUNGEST=`expr $PREVYOUNGEST + 1`
                                        echo "last youngest is $LASTYOUNGEST" >> $LogFile
                                        svnadmin dump $project --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental > $BACKUPDIR/$project-$LASTYOUNGET-$NEWYOUNGEST.$DATE
                                        echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest
                                fi
                        fi
  fi
        done
}

# our post rsync accounting function
do_mail()
{
   mail $MAILADDR -s svn-back_log < $LogFile
}
# some error handling and/or run our backup and accounting
do_accounting && do_svndump && do_mail



SVN全量备份和增量备份脚本

Linux SVN 全备和增量备份脚本_Cisco技术 无忧网客联盟 http://www.net527.cn/a/caozuoxitong/Linux/2011/1008/20014.html ...
  • bai_juaner
  • bai_juaner
  • 2013年02月21日 19:45
  • 1349

Linux下SVN的三种备份方式

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

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

Linux SVN服务器做定时全量备份脚本:          进入目录:cd /root/svn/           新建sh文件:week_backed_up.sh           文...
  • wangmuming
  • wangmuming
  • 2015年07月09日 10:38
  • 3678

SVN备份及其还原 — dump/load方法

由于服务器要进行搬迁,学习了一下SVN备份还原的一些知识,跟大家分享一下。 本文中采用最简单的dump/load方法。 备份: 一个较大的Subsersion版本库想用最少的空间来将它备份下来,...
  • lan120576664
  • lan120576664
  • 2013年11月04日 10:20
  • 1470

svn库迁移-备份和恢复-svnadmin

文章转载来自:http://blog.sina.com.cn/s/blog_5eb1a2670100l24i.html   前段时间对项目SVN库做整理, 顺带再次研究了下SVN迁移的方式...
  • deng_sai
  • deng_sai
  • 2014年09月26日 16:28
  • 3899

svn备份方式对比分析

svn备份方式对比分析 一般采用三种方式: 1、svnadmin dump 2、svnadmin hotcopy 3)svnsync 注意,svn备份不宜采用普通的文件拷贝方式(除非你备...
  • Steven_liwen
  • Steven_liwen
  • 2016年07月10日 13:41
  • 1432

SVN使用svnadmin dump进行备份时报“拒绝访问”错误

svnadmin dump进行备份时报“拒绝访问”错误的解决方法,网上查阅的大多数都是说文件系统错误,自己遇到的情况与网上的不同,就把这个问题和解决方法分析给大家吧...
  • u011592350
  • u011592350
  • 2016年02月25日 14:00
  • 2351

SVN版本库的迁移 dump的详细使用

SVN版本库的迁移 dump的详细使用
  • hzfw2008
  • hzfw2008
  • 2017年09月25日 10:35
  • 168

centos svn备份

svnadmin dump方式 SVN迁移需要做如下操作: 1. 将原来的Repository导出为一个文件dumpfile 。 #svnadmin dump 原先的repos的目录路径(/...
  • liyan61
  • liyan61
  • 2015年07月10日 14:48
  • 303

一个简单的SVN备份批处理脚本

@echo offcd .rem 设置备份目录位置set SVN_BAK=%cd%/free_viewset URL=http://192.168.1.50/svn/free_viewrem 如果不存...
  • ssmile
  • ssmile
  • 2011年02月09日 17:28
  • 2532
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:svn dump 全自动备份脚本
举报原因:
原因补充:

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