SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 28552|回复: 52

[推荐] SVN自动全备份及增量备份脚本,包含文件压缩,可加入window 任务

  [复制链接]
发表于 2008-12-23 14:21:38 | 显示全部楼层 |阅读模式
一直用这套脚本备份,脚本主体虽不是原创,但是从网上得到后因为不能运行也进行了些修改,前两天看到有人问关于SVN备份的问题,今天又把脚本整理了一下,解决了不能循环备份多个配置库的问题。希望对大家有所帮助。在此也谢谢提供脚本主体的高人。) F5 }& h; s5 E. q+ f, j
我的备份策略是一个月一次全备份,一周一次增量备份,并且每天也进行增量备份,在Window任务里设置定时进行,设置好后就不用管了,再加一层保险就是定期把备份文件移到另外一台机器存储。
' _* ~) O/ G% K: G/ x% k(一)全备份,包含两个文件hotcopy.bat和最终执行文件fullbackup.bat6 j5 F) V$ t( H  |, ?. \) V
1) hotcopy.bat6 R6 S3 e- z0 s7 \3 Y( q% G: Q
@echo 正在备份版本库%1……% E+ f1 M$ B( G0 ~
rem @%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
3 j6 j$ j" u4 _1 s: t& R3 C- K@%SVN_HOME%\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
/ m8 h2 `: _0 w6 i) U: S4 Z, l@echo 版本库%1成功备份到了%2!4 m3 V) O+ B: E7 L( D  V

8 x' N+ s3 C3 ]4 K3 T9 I" m( ?
* [6 B4 }8 A8 H% `+ ?9 }2)fullbackup.bat( e0 u& |8 s& [4 q: x) M
echo off! @  ^* y: H" r: }0 o$ ^( C
rem Subversion的安装目录% a4 ?( p0 |) c2 x
rem set SVN_HOME="F:\Program Files\Subversion"6 q$ f( e( R/ i" U  c+ a
set SVN_HOME="F:\Program Files\CollabNet Subversion Server"( _" M+ \9 q! x. ?' T3 y
rem 所有版本库的父目录. ]7 _- F7 Q# F% k
set SVN_ROOT=G:\SVN
4 J7 @( i* o% n! Y2 r' v+ W' Zrem 备份的目录
( Y! U0 f- ]2 k$ B6 Qset BACKUP_SVN_ROOT=h:\svnrootbak
5 _" h# }6 `( E: Bset BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%( n  F& b, j% g

3 x! J3 x  o& o1 ?) Rif exist %BACKUP_DIRECTORY% goto checkBack7 ^! U& K3 ?" t6 G- @
echo 建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/fullbackup.log
8 L6 l4 j8 f0 z/ F3 ?" z# Y2 M1 Tmkdir %BACKUP_DIRECTORY%. |2 W  ?3 F9 ^8 O- A5 p( Q  _* Z& M
rem 验证目录是否为版本库,如果是则取出名称备份
! [: D' K/ w6 a4 {for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" hotcopy.bat "%%~fI" %%~nI
  \6 o; Y" ~) d- t) ~, s: fgoto end
+ x8 t( ]% L% |  u% A. A, ?:checkBack
$ l7 P4 m1 J# B1 R9 k1 m4 q# Xecho 备份目录%BACKUP_DIRECTORY%已经存在,请清空。/ ?/ f( N3 ?6 z: B/ h
goto end4 ]5 _" G9 `. F
:end
- c+ z  E' ~: i+ D  j1 M, T
, @1 O& S7 A; \1 |; f8 \4 }& K, F4 ~& J. g5 `) |
(二)增量备份,包含三个文件,dump.bat、最终执行文件svndump.bat和配置库名称配置projectlist.conf
) B' C! ^: x# o9 I$ s/ F1)dump.bat
0 S: J! K* j0 b2 G( l* `. S@ECHO OFF
; Z+ f1 f" C( w8 Urem 调用格式:dump 项目库名% K: o/ s& b, o8 X+ h
if "%1"=="" goto no_args* w4 z% Q7 \/ K9 S
set PROJECT=%1' ~$ u8 T& `4 }# l( j/ l) X
if not exist %RAR_STORE%\%PROJECT% mkdir %RAR_STORE%\%PROJECT%$ r2 J( h& K! g+ U/ X9 }
cd %RAR_STORE%\%PROJECT%: S8 B. i4 P5 R! t: g
SET LOWER=0
+ Q6 b  m* M4 M7 d8 o2 X. GSET UPPER=0/ x5 s/ x+ P$ i+ ]" P
- a- P1 I. l% u8 r9 q
@echo 项目库%PROJECT%2...>> %Log_PATH%\%PROJECT%_log.txt
' C. E: n5 W+ l% u* F2 B- K1 D%SVN_LOOK% youngest %SVN_REPOROOT%\%PROJECT%> %Log_PATH%\A.TMP+ @" Q% l* |& Q7 L) g# o. u
@echo 项目库%PROJECT%3...>> %Log_PATH%\%PROJECT%_log.txt
( Y) ^: K4 _( R. p) i@FOR /f %%D IN (%Log_PATH%\A.TMP) DO set UPPER=%%D
5 P& K2 b8 L: x5 Bif %UPPER%==0 GOTO :N_EXIT4 ?& B+ N" S2 o  y
if not exist %Log_PATH%\%PROJECT%_last_revision.txt GOTO :BAKUP- l- y% E5 @( U# s# b+ [
rem 取出上次备份后的版本号,并做+1处理(注意此算法未在98系统验证)
/ S  x+ J/ S2 h& N" Q# c" J; E@FOR /f %%C IN (%Log_PATH%\%PROJECT%_last_revision.txt) DO @set LOWER=%%C
7 E7 C& V8 N% E) H) j@set /A LOWER=%LOWER%+1
8 Y$ o# w( G; K4 y! }+ V) wrem 不需要备份,则跳转结束$ L. u; Y5 U- _2 D5 _! y" k! Y- d
IF %LOWER% gtr %UPPER% GOTO :N_EXIT
# n, s- q# W7 W* F+ a4 S! K" o* w8 N, R8 f
:BAKUP
  t9 D" ~  Q7 A, r& p) kSET FILENAME=%PROJECT%_%LOWER%_%UPPER%
) g. F* ?" Q2 l" D0 t@ECHO 开始备份项目库:%PROJECT%,生成文件=%FILENAME%
; }( f# n& N, ^2 e, R7 P%SVN_ADMIN% dump %SVN_REPOROOT%\%PROJECT% -r %LOWER%:head --incremental >%FILENAME%.dmp
. l% }* e  e+ l+ B! L$ grem %RAR_CMD% a -df %PROJECT%_%UPPER%.rar %! F, Z& x5 d  t6 }
rem 准备写备份日志信息
; C4 P  l! o! k6 r: S/ l; h% a: BIF %LOWER% gtr 0 GOTO :WRITENOTE
9 s4 t# U3 o  q1 R. J7 {@ECHO ------2-----%date% >> %Log_PATH%\%PROJECT%_log.txt
0 j- ~3 N) `1 T6 k( W+ e@echo  -- 3-------添加备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt
) C* K: h* }0 W! ^" U! OGOTO :COMPLETE. f9 x, _/ X- c+ q: [3 w
+ Y9 G: x9 O+ }" N4 I. s
:WRITENOTE
" ^0 O! x% O+ D$ Z, b7 N" d@ECHO %date% >> %Log_PATH%\%PROJECT%_log.txt
0 s8 z+ ?4 q9 ?6 P& w5 D+ Y2 K4 e7 S, f@echo  -- 4------添加增量备份文件 %PROJECT%_%UPPER%.rar,从[%LOWER%]到[%UPPER%] >> %Log_PATH%\%PROJECT%_log.txt
7 @# E8 o1 T3 \; K1 f3 u
8 W$ Q3 ]+ L% u$ W9 @# V9 }& ~:COMPLETE+ K, s/ d& A9 A1 S* i# j6 `
rem 下面一行用于拷贝备份文件到映射的驱动器上
" }1 H- |; b5 X* P+ Srem copy %PROJECT%.rar %RAR_STORE%\%PROJECT%\
1 ~5 w( [7 K" S, smove %FILENAME%.dmp %RAR_STORE%\%PROJECT%\
6 U- R6 p: u2 m* c  _" ?7 |  }& j1 tdel %Log_PATH%\A.TMP( k* Z- z2 C/ x& @# N
@echo %UPPER% > %Log_PATH%\%PROJECT%_last_revision.txt
" }2 p) Z! h" Y  D/ d
$ R6 ~% [) s: x( }* Z. \% i:N_EXIT
4 H" q5 p% [$ ]( ~  F6 _! y@echo 项目库%PROJECT%处理结束...>> %Log_PATH%\%PROJECT%_log.txt
+ e& i  Z! u! D& `1 t- }@CD... h0 t; i9 }, U6 d4 Y
@exit /B' [% L5 R+ O0 T9 v  c4 b
:no_args
" }  a1 [# Q0 G7 Z- X% f$ D$ A@ECHO ON' Q! e5 s0 Z+ o0 H+ ^% S9 I5 y6 a
@echo "正确调用方法: dump 项目库名", V7 f2 n6 d  o8 \) X' D3 g2 F

+ E  B; X2 G3 V4 d% p) g; N7 M0 x7 k. R. D4 s8 G8 a
2)svndump.bat 2 G  G6 S( Y0 e
echo off
: b, k: g. i; K, K/ u; }" o! h5 d& wrem Subversion的安装目录及执行文件
3 N1 K4 [6 H5 c2 D+ W& D, fset SVN_HOME="F:\Program Files\CollabNet Subversion Server"# `; A& R* T9 o% c+ ^! `
set SVN_ADMIN=%SVN_HOME%\svnadmin.exe
1 ?/ z% \1 }+ w5 `. X8 Tset SVN_LOOK=%SVN_HOME%\svnlook.exe2 `6 N/ Q" A2 t- _- c* M9 C. b
rem 配置库仓库根目录4 }( n, M' G, `" f: a
set SVN_REPOROOT=G:\SVN
+ H, Y, p; R4 trem 压缩命令$ X( w6 D) t1 ^
set RAR_CMD="E:\Progra~1\WinRAR\WinRAR"
2 |) _* \' L$ z& yrem 增量备份文件存放路径
0 R& d0 f+ M4 H) q4 `" R" }set RAR_STORE="H:\svnincrementW"; J: a4 G, U; T" T- P) v
rem 日志及最后一次备份修订号存放文件目录,以下是跟增量备份脚本目录同一目录
' }$ }) c# t& G0 ~) r1 Mset Log_PATH=G:\backup\incrementW& x3 }) d" X6 U
" V9 H9 C# F; A/ c& B' L6 M( n
@echo 项目库%PROJECT%处理1...>> %Log_PATH%\%PROJECT%_log.txt
% m0 @) J: b5 irem 读取项目库列表文件,并忽略其中;开头的行
& n/ L+ r7 P' ]FOR /f "eol=;" %%C IN (projectlist.conf) DO  call G:\backup\incrementW\dump.bat %%C9 q7 L& ]2 [/ `& f0 n. H
9 R. o  f  I$ I9 I3 h5 X0 `% Z6 \

2 E$ I- ?$ `( u3 l, H3)projectlist.conf
1 u6 ]4 F- b" l) C* T3 c9 h( x  ?. Z;**************************************************
# W: J3 m' w& `- }+ k;01. project1开发库2 K9 S) x& j0 s0 q+ X
;    更新频率: 高
( ~, B4 ]3 E2 c; q- r$ d3 r;**************************************************! ^/ T, q6 ^' e; ^& j
PROJECT1
6 A! {9 w6 c  T- T6 P;**************************************************9 D' S9 O8 b! P
;02. 此处可写注释信息
( W/ Q7 f  U) e: }. H) t2 L;**************************************************' M/ n" f. }/ F, W) _9 T; I
PROJECT24 V. \- ]3 s' d7 B+ J3 e  |0 |
PROJECT3
7 y$ x: ^# ]! O6 B1 m7 F- y, ~PROJECT4
+ Y. Q, \* B  JPROJECT50 N3 M" X  Y1 H) U
  m  y" b% T' m- W$ k. ?( _
[ 本帖最后由 千寻 于 2008-12-23 14:26 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 2金钱 +5 收起 理由
ydyin + 1 赞一个!
CMStruggling + 4 感谢分享!!!

查看全部评分

本帖被以下淘专辑推荐:

  • · SVN|主题: 3, 订阅: 0
发表于 2008-12-23 15:48:51 | 显示全部楼层

回复 楼主 的帖子

感谢千寻千大人分享关于SVN自动备份的脚本;0 v4 ?4 Q6 B5 q* }; y3 v
大家的福音啊!!!
回复 支持 反对

使用道具 举报

发表于 2008-12-24 11:18:08 | 显示全部楼层
感谢版主分享~
, e& Q2 D; y2 O  @" c9 \呵呵; v' L& }- Z" e; H4 h7 t
分享 互助 共进~
回复 支持 反对

使用道具 举报

发表于 2008-12-24 12:41:43 | 显示全部楼层

有没有分段备份的!

现在的数据库比较大,主要是项目有一些库文件有1G大小。整个项目大小在2.5G,所以在现在只有1000个版本是备份大小已经超过了5G,速度很慢。是否可以分段备份一些,这样以后只备份后续的部分即可?
回复 支持 反对

使用道具 举报

发表于 2008-12-24 13:09:51 | 显示全部楼层
可以选择备份一部分* K! O1 T% T" N9 T6 C$ F4 x
部分版本即可
回复 支持 反对

使用道具 举报

发表于 2008-12-25 14:20:02 | 显示全部楼层
谢谢分享,我习惯把备份写成windows服务,来代替计划任务
回复 支持 反对

使用道具 举报

发表于 2009-2-19 17:13:28 | 显示全部楼层
全力支持!!!喜欢!
回复 支持 反对

使用道具 举报

发表于 2009-8-17 22:34:20 | 显示全部楼层
楼主厉害 谢谢啊
回复 支持 反对

使用道具 举报

发表于 2009-8-18 11:00:49 | 显示全部楼层

回复 楼主 的帖子

看了你的脚本,才知道有磁带机和专门的备份工程师是多么幸福的一件事。
回复 支持 反对

使用道具 举报

发表于 2010-2-23 16:40:23 | 显示全部楼层
LZ,你这个增量备份的脚本如何使用 ? 能给个说明吗?
; m1 ~5 {) U9 I# L( H# n- z还有完全备份的脚本,我用了,目标备份目录如果不是空的话,执行脚本会报错,并不会去删除....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /4 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2019-2-19 20:06 , Processed in 0.067012 second(s), 8 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

快速回复 返回顶部 返回列表