昨天已过,今天好好过,明天怎样过?天知道了

(转)SVN自动备份脚本 增量+全量 windows+linux

上一篇 / 下一篇  2012-03-28 14:41:00 / 个人分类:配置管理

 
来自 http://blog.sina.com.cn/s/blog_5eb1a2670100rr94.html
 
 
windows下增量备份脚本,参考了网友的作品,请按照实际需要进行修改。
svndump.bat
echo off

rem Subversion的安装目录及执行文件
set SVN_HOME="C:\Program Files\Subversion\bin"
set SVN_ADMIN=%SVN_HOME%\svnadmin.exe
set SVN_LOOK=%SVN_HOME%\svnlook.exe

rem 配置库仓库根目录
set SVN_REPOROOT=D:\svn

rem 压缩命令
set RAR_CMD="C:\Program Files\WinRAR"

rem 增量备份文件存放路径
set RAR_STORE="D:\svn_increment_backup"

rem 日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录
set Log_PATH=D:\svn_back_scripts\increment

rem 读取项目库列表文件,并忽略其中;开头的行
FOR /f "eol=;" %%C IN (projectlist.conf) DO call D:\svn_back_scripts\increment\dump.bat %%C

dump.bat
@ECHO OFF
rem 调用格式:dump 项目库名
if "%1"=="" goto no_args
set PROJECT=%1
if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%
cd %RAR_STORE%\%PROJECT%
SET LOWER=0
SET UPPER=0

if not exist %Log_PATH%\%PROJECT% mkdir %Log_PATH%\%PROJECT%
@echo 项目库%PROJECT%开始备份>> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP
@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D
if %UPPER%==0 GOTO :N_EXIT
if not exist %Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt GOTO :BAKUP

rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
@FOR /f %%C IN (%Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt) DO @set LOWER=%%C
@set /A LOWER=%LOWER%+1

rem 不需要备份,则跳转结束
IF %LOWER% gtr %UPPER% GOTO :N_EXIT

:BAKUP
SET FILENAME=%PROJECT%_%LOWER%_%UPPER%
@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp

rem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %
rem 准备写备份日志信息
IF %LOWER% gtr 0 GOTO :WRITENOTE
@ECHO %PROJECT%备份时间: �te% >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@echo %PROJECT%备份revision区间 从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
GOTO :COMPLETE

:WRITENOTE
@ECHO �te% >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@echo -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt

:COMPLETE
rem 下面一行用于拷贝备份文件到目标地址
@echo 将dump备份文件%FILENAME%.dmp 转移至%RAR_STORE%\%PROJECT% 目录下 >> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
move %FILENAME%.dmp %RAR_STORE%\%PROJECT%\
del %Log_PATH%\A.TMP
@echo %UPPER% > %Log_PATH%\%PROJECT%\%PROJECT%_last_revision.txt

:N_EXIT
@echo 项目库%PROJECT%处理结束!>> %Log_PATH%\%PROJECT%\%PROJECT%_log.txt
@CD..
@exit /B
:no_args
@ECHO ON
@echo "请正确使用svnadmin dump命令: dump 项目库名"

windows下全量备份脚本,参考了网友的作品,请按照实际需要进行修改。
fullbackup.bat
echo off

rem Subversion的安装目录
set SVN_HOME="C:\Program Files\Subversion\bin"

rem 所有版本库的父目录
set SVN_ROOT=D:\svn

rem 备份的目录
set BACKUP_SVN_ROOT=D:\svn_full_backup
set BACKUP_DIRECTORY=�CKUP_SVN_ROOT%\�te:~0,10%
if exist �CKUP_DIRECTORY% goto checkBack
echo 建立备份目录�CKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log
mkdir �CKUP_DIRECTORY%

rem 验证目录是否为版本库,如果是则取出名称备份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nI

mkdir �CKUP_DIRECTORY%\conf
xcopy %SVN_ROOT%\conf �CKUP_DIRECTORY%\conf
goto end

:checkBack
echo 备份目录�CKUP_DIRECTORY%已经存在,请清空。
goto end
:end

hotcopy.bat
@echo 正在备份版本库%1……
@%SVN_HOME%\svnadmin hotcopy %1 �CKUP_DIRECTORY%\%2
@echo 版本库%1成功备份到了%2!

Linux下的增量备份脚本,请按实际需进行修改
#!/bin/sh
##Subversion的安装目录及执行文件
SVN_HOME=/data/csvn/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook

##配置库根目录
SVN_REPOROOT=/data/forallsoft

##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=/data/svnbackup/incremental/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi

##日志存放目录
Log_PATH=/data/svnbackup/log
if [ ! -d "$Log_PATH" ];then
mkdir -p $Log_PATH
fi

##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls) 
do
if [ ! -d "$RAR_STORE/$name" ];then
mkdir $RAR_STORE/$name
fi

cd $RAR_STORE/$name
if [ ! -d "$Log_PATH/$name" ];then
mkdir $Log_PATH/$name
fi

echo ******Starting backup from $date****** >> $Log_PATH/$name/$name.log
echo ******svn repository $name startting to backup****** >> $Log_PATH/$name/$name.log
$SVN_LOOK youngest $SVN_REPOROOT/$name > $Log_PATH/A.TMP
UPPER=`head -1 $Log_PATH/A.TMP`

##取出上次备份后的版本号,并做+1处理
NUM_LOWER=`head -1 $Log_PATH/$name/last_revision.txt`
let LOWER="$NUM_LOWER+1"

##开始做增量备份并记录$UPPER,为下次备份做准备
$SVN_ADMIN dump $SVN_REPOROOT/$name -r $LOWER:$UPPER --incremental > $RAR_STORE/$name/$LOWER-$UPPER.dump
rm -f $Log_PATH/A.TMP
echo $UPPER > $Log_PATH/$name/last_revision.txt
echo ******This time we bakcup from $LOWER to $UPPER****** >> $Log_PATH/$name/$name.log
echo ******Back up ended****** >> $Log_PATH/$name/$name.log
done

Linux下的全量备份脚本,请按实际需要进行相应的修改
#!/bin/sh
##Subversion的安装目录及执行文件
SVN_HOME=/data/csvn/bin
SVN_ADMIN=$SVN_HOME/svnadmin
SVN_LOOK=$SVN_HOME/svnlook

##配置库根目录
SVN_REPOROOT=/data/forallsoft

##增量备份文件存放路径
date=$(date '+%Y-%m-%d')
RAR_STORE=/data/svnbackup/full/$date
if [ ! -d "$RAR_STORE" ];then
mkdir -p $RAR_STORE
fi

##读取项目库列表
cd $SVN_REPOROOT
for name in $(ls)
do 
##开始做全量备份
$SVN_ADMIN hotcopy $SVN_REPOROOT/$name $RAR_STORE/$name

done

TAG: 配置管理

 

评分:0

我来说两句

日历

« 2024-04-23  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 17072
  • 日志数: 8
  • 文件数: 28
  • 建立时间: 2008-05-04
  • 更新时间: 2013-01-04

RSS订阅

Open Toolbar