Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397728
  • 博文数量: 58
  • 博客积分: 2096
  • 博客等级: 大尉
  • 技术积分: 608
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-29 16:09
个人简介

专注于数据库技术研究和实践,目前就职于互联网金融企业,提供Oracle数据库技术支持和维护。 联系电话:18616803656

文章分类

全部博文(58)

文章存档

2020年(1)

2019年(4)

2018年(1)

2017年(3)

2015年(4)

2014年(7)

2012年(1)

2011年(27)

2010年(8)

2009年(2)

我的朋友

分类: LINUX

2009-12-09 16:26:59

  SVN作为我们的版本管理库,记录着我们在整个项目过程中的变更和修改,对整个项目的生命流程有着重要的意义,所以,做好备份,不让数据在不可预料的情况下丢失,是非常重要而迫切的。
  SVN备份策略:
  1) 完全备份 每周一次
  2) 增量备份 每天一次
  3) 实时同步 项目没有需求,所以不做
 
1)项目列表
##############################################
#
# Write Repository Name in here 2009-12-03
#                       Author: ******
#
##############################################
#Document Repository
svndocrepos
#SourceCode Repository
svnsrcrepos
 
2)完全备份
fullbackup.sh
#/bin/bash
#
#Full Backup SVN Repository on 2009-12-03
#                      Author:******
#Subversion Home
SVN_HOME=/usr/local/subversion
#Backup Directory
BACKUP_DIR=/backup/svnrepos/weekly
#Log Directory
LOG_PATH=/backup/svnrepos/log
#Backup Date
DATE=`date +%Y%m%d`
#Backup Time
TIME=`date +%T`
#Project File
PROJLST=/svnrepos/script/project.lst
#SVNADMIN Command Path
SVNADMIN=$SVN_HOME/bin/svnadmin
#Project List
LIST=`cat $PROJLST | grep -v "#" | awk 'NF'`
#Read the Project Name in Project List
for PROJNAME in $LIST
  do
#如果你的仓库都在一个目录下面,就不需要这个判断

    echo "The Project Name is $PROJNAME." >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
    echo "The SVN directory is $SVN_ROOT." >>$LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
#Require the newest version
    VERSION=`$SVN_HOME/bin/svnlook youngest $SVN_ROOT/$PROJNAME`
    echo "The current version is $VERSION." >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
    FILENAME=$PROJNAME"_"$DATE"_"$VERSION.tar.bz2
#Check if the backup file exist or not
    if [ -f $BACKUP_DIR/$FILENAME ]
     then echo "Backup file $FILENAME is already exist $DATE $TIME." >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
    else
#Start hotcopy backup
    echo "Start Backup the SVN repository $PROJNAME $DATE $TIME" >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
    $SVNADMIN hotcopy $SVN_ROOT/$PROJNAME --clean-logs $BACKUP_DIR/$PROJNAME
#Require the version for backup project
    BAKVER=`$SVN_HOME/bin/svnlook youngest $BACKUP_DIR/$PROJNAME`
    echo "The backup version of $PROJNAME is $BAKVER $DATE $TIME." >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
#Test if the backup is success
      if [ $BAKVER = $VERSION ]
       then
       cd $BACKUP_DIR
       tar cjf $FILENAME $PROJNAME
       rm -fr $BACKUP_DIR/$PROJNAME
#      echo "VERSION" > $LOG_PATH/$PROJNAME"_"last_revision.txt
       echo "Full Backup Successful $DATE $TIME!!!" >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
      else
         echo "Full Backup failed $DATE $TIME." >> $LOG_PATH/Fullbackup_$PROJNAME"_"$DATE.log
      fi
    fi
#Upload to file server
    HOST=10.253.125.62
    echo "Start upload backup files $DATE `date +%T`......" |tee -a $LOGFILE
    lftp -u wmsvn,wmsvn $HOST -e "cd /svnroot/$PROJNAME && lcd $BACKUP_DIR && put $FILENAME && bye" |tee -a $LOGFILE
    echo "End upload backup files successful $DATE `date +%T`" |tee -a $LOGFILE
done
3)增量备份
increbackup.sh
#/bin/bash
#
#Increment Backup SVN Repository on 2009-12-03
#
#Subversion Home
SVN_HOME=/usr/local/subversion
#Backup Directory
BACKUP_DIR=/backup/svnrepos/daily
#Log Directory
LOG_PATH=/backup/svnrepos/log
#Backup Date
DATE=`date +%Y%m%d`
#Backup Time
TIME=`date +%T`
#Project File
PROJLST=/svnrepos/script/project.lst
#SVNADMIN Command Path
SVNADMIN=$SVN_HOME/bin/svnadmin
#Project List
LIST=`cat $PROJLST | grep -v "#" | awk 'NF'`
#Read the Project Name in Project List
for PROJNAME in $LIST
  do
#如果你的仓库都在一个目录下面,就不需要这个判断

    LOGFILE=$LOG_PATH/Increbackup_$PROJNAME"_"$DATE.log
    VERFILE=$LOG_PATH/$PROJNAME"_"last_revision.txt
    echo "The Project Name is $PROJNAME." | tee $LOGFILE
    echo "The SVN directory is $SVN_ROOT." | tee -a $LOGFILE
    LOWER=0
    UPPER=0
#Require the newest version
    VERSION=`$SVN_HOME/bin/svnlook youngest $SVN_ROOT/$PROJNAME`
    echo "The current version is $VERSION." | tee -a $LOGFILE
    UPPER=$VERSION
#Require the last backup version
    if [ -f $VERFILE ]
     then echo "Require the last version from file $VERFILE $DATE $TIME." | tee -a  $LOGFILE
     LOWER=`cat $VERFILE`
     LOWER=`expr $LOWER + 1`
    else
     LOWER=$LOWER
    fi
#Check if it need to backup or not
    if [ $UPPER -le $LOWER ];then
      echo "The $PROJNAME Repository newest version is $UPPER, last backup version is `expr $LOWER - 1`, it did not need to backup $DATE $TIME" |tee -a $LOGFILE
      continue
    fi
#Start Increment Backup
    FILENAME=$PROJNAME"_"$DATE"_"$LOWER"_"$UPPER.tar.bz2
    DMPFILE=$BACKUP_DIR/$PROJNAME"_"$DATE"_"$LOWER"_"$UPPER.dmp
    echo "Start Increment Backup the SVN repository $PROJNAME from $LOWER to $UPPER $DATE $TIME" | tee -a $LOGFILE
    $SVNADMIN dump $SVN_ROOT/$PROJNAME -r $LOWER:head --incremental > $DMPFILE
#Test if the backup is success
      if [ -f $DMPFILE ]
       then
       cd $BACKUP_DIR
       echo "Start compress the dmp file $DMPFILE......" |tee -a $LOGFILE
       tar cjf $FILENAME $PROJNAME"_"$DATE"_"$LOWER"_"$UPPER.dmp
       echo "Delete the dmp file $DMPFILE...... " |tee -a $LOGFILE
       rm -fr $BACKUP_DIR/$PROJNAME"_"$DATE"_"$LOWER"_"$UPPER.dmp
       echo "$UPPER" > $VERFILE
       echo "Increment Backup Successful $DATE $TIME!!!" |tee -a $LOGFILE
      else
         echo "Increment Backup failed $DATE $TIME." |tee -a $LOGFILE
      fi
#Upload to file server
    HOST=10.253.125.62
    echo "Start upload backup files $DATE `date +%T`......" |tee -a $LOGFILE
    lftp -u wmsvn,wmsvn $HOST -e "cd /svnroot/$PROJNAME && lcd $BACKUP_DIR && put $FILENAME && bye" |tee -a $LOGFILE
    echo "End upload backup files successful $DATE `date +%T`" |tee -a $LOGFILE
done
加到crontab上:crontab -e
0 1 * * * sh /svnrepos/script/increbackup.sh >>/backup/svnrepos/log/crontab_backup.log
0 3 * * 5 sh /svnrepos/script/fullbackup.sh >>/backup/svnrepos/log/crontab_backup.log
还没有加上存放到其他服务器上的备份,没有拿到FTP服务器,后续更新。
做好备份,就可以高枕无忧了,每个月做一次恢复测试就OK了。
 
已经加上ftp上传的部分,算是完整了。
阅读(2042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~