SVN存储库备份策略
我是SVN的新手,我想知道在Windows环境下备份存储库的方法有哪些?
你可以使用像(Linux)的东西:
svnadmin dump repositorypath | gzip > backupname.svn.gz
由于Windows不支持GZip,它只是:
svnadmin dump repositorypath > backupname.svn
我们使用svnadmin hotcopy,例如:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
根据这本书 :
您可以随时运行此命令,并创build存储库的安全副本,而不pipe其他进程是否正在使用存储库。
你当然可以ZIP(最好是7-Zip)备份副本。 恕我直言,这是最直接的备份选项:在灾难的情况下,除了将其解压缩到位以外,几乎没有什么可做的。
在Subversion网站上有一个hotbackup.py脚本,对于自动备份非常方便。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
这是一个Perl脚本,它将:
- 备份回购
- 通过SCP复制到另一台服务器
- 检索备份
- 从备份创buildtesting存储库
- 做一个testing结帐
- 通过电子邮件与您的任何错误(通过cron)
剧本:
my $svn_repo = "/var/svn"; my $bkup_dir = "/home/backup_user/backups"; my $bkup_file = "my_backup-"; my $tmp_dir = "/home/backup_user/tmp"; my $bkup_svr = "my.backup.com"; my $bkup_svr_login = "backup"; $bkup_file = $bkup_file . `date +%Y%m%d-%H%M`; chomp $bkup_file; my $youngest = `svnlook youngest $svn_repo`; chomp $youngest; my $dump_command = "svnadmin -q dump $svn_repo > $bkup_dir/$bkup_file "; print "\nDumping Subversion repo $svn_repo to $bkup_file...\n"; print `$dump_command`; print "Backing up through revision $youngest... \n"; print "\nCompressing dump file...\n"; print `gzip -9 $bkup_dir/$bkup_file\n`; chomp $bkup_file; my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz"; print "\nCreated $zipped_file\n"; print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`; print "\n$bkup_file.gz transfered to $bkup_svr\n"; #Test Backup print "\n---------------------------------------\n"; print "Testing Backup"; print "\n---------------------------------------\n"; print "Downloading $bkup_file.gz from $bkup_svr\n"; print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`; print "Unzipping $bkup_file.gz\n"; print `gunzip $tmp_dir/$bkup_file.gz`; print "Creating test repository\n"; print `svnadmin create $tmp_dir/test_repo`; print "Loading repository\n"; print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`; print "Checking out repository\n"; print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`; print "Cleaning up\n"; print `rm -f $tmp_dir/$bkup_file`; print `rm -rf $tmp_dir/test_checkout`; print `rm -rf $tmp_dir/test_repo`;
脚本来源以及关于这种types的备份合理性的更多细节。
我使用svnsync ,它将远程服务器设置为镜像/从属。 我们有一台服务器在两个星期前就closures了,我可以很容易地将主机切换到主要位置(只需将从属存储库上的UUID重置为原来的位置)。
另一个好处是,同步可以由中间人来运行,而不是在任一服务器上的任务。 我有一个客户端到两个VPN同步他们之间的存储库。
svnadmin hotcopy
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
这个子命令对你的仓库进行完整的“热”备份,包括所有的钩子,configuration文件,当然还有数据库文件。
svnbackup在谷歌代码,一个.NET控制台应用程序。
-
您可以使用
svnadmin dump
创build存储库备份( 转储 )。 -
然后您可以使用
svnadmin load
导入它。
SVNBook中的详细参考: “使用svnadmin进行存储库数据迁移”
基本上,如果svn服务器停止,复制存储库文件夹是安全的。 (来源: https : //groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )
所以,如果你被允许停止服务器,那就去做吧,只需要用一些脚本或者备份工具来复制版本库。 Cobian Backup在这里可以很好地适用,因为它可以自动停止和启动服务,并且可以执行增量备份,因此您只备份最近更改的部分存储库(如果存储库很大,并且备份到远程位置)。
例:
- 安装Cobian备份
-
添加备份任务:
-
将源设置为存储库文件夹(例如
C:\Repositories\
), -
添加预备份事件
"STOP_SERVICE"
VisualSVN, -
添加备份后事件
"START_SERVICE"
VisualSVN, -
根据需要设置其他选项。 我们已经设置了增量备份,包括删除旧备份,备份计划,目的地,压缩包括。 档案分割等
-
-
利润!
这里有一个GUI Windows工具,用于转储本地和远程Subversion存储库:
https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html
工具描述说:
这个简单的工具允许做一个本地和远程Subversion版本库的转储备份。 该软件的工作方式与“svnadmin”相同,但不是GUI前端。 而是直接使用subversion库允许创build独立模式转储没有任何其他额外的工具。
希望这个帮助…
我喜欢将整个repo目录复制到我的备份位置。 这样,如果发生什么事情,你可以复制目录回来,并准备立即去。
只要确保保留权限,如果需要的话。 通常,这只是Linux机器上的一个问题。
有2个主要的方法来备份SVN服务器,首先是hotcopy将创build您的存储库文件的副本,这种方法的主要问题是,它保存有关底层文件系统的数据,所以你可能有一些困难,试图转贴这种备份在另一个SVN服务器types或另一台机器。 还有另外一种叫做dump的备份types,这个备份不会将底层文件系统的任何信息保存到任何基于tigiris.org subversion的SVN服务器。
关于备份工具,你可以使用svnadmin工具(它能够做hotcopy和转储)从命令提示符下,这个控制台驻留在您的svn服务器居住的同一个目录,或者您可以谷歌的svn备份工具。
我的build议是,你做这两种备份,并让他们离开办公室到您的电子邮件帐户,amazon s3服务,FTP或azure色的服务,这样你将有一个安全的备份,而不必主机的svn服务器的某个地方你的办公室。
对于托pipe版本库,您可以自svn版本1.7使用svnrdump
,类似于本地存储库的svnadmin dump
。 这篇文章提供了一个很好的步骤,主要归结为:
svnrdump dump /URL/to/remote/repository > myRepository.dump
下载转储文件后,您可以在本地导入
svnadmin load /path/to/local/repository < myRepository.dump
或将其上传到您select的主机。
如果您使用FSFS存储库格式(默认),则可以复制存储库本身以进行备份。 使用旧的BerkleyDB系统,版本库不是平台独立的,你通常想使用svnadmin转储。
用于备份的svnbook文档主题build议使用svnadmin hotcopy
命令,因为它将处理诸如正在使用的文件等问题。
@echo off set hour=%time:~0,2% if "%hour:~0,1%"==" " set hour=0%time:~1,1% set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2% echo Performing Backup md "\\HOME\Development\Backups\SubVersion\%folder%" svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn
这是我运行的batch file,执行我的备份
对于日常和完全备份解决scheme,请在这里使用SVN备份脚本 。
我已经编译了我为了对项目的远程SVN存储库进行备份而执行的步骤。
install svk (http://svk.bestpractical.com/view/SVKWin32) install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download) svk mirror //local <remote repository URL> svk sync //local
这需要时间,并说它是从存储库中获取日志。 它在C:\Documents and Settings\nverma\.svk\local
创build一组文件。
要使用来自远程设备的最新一组更新来更新此本地存储库,请不时运行上一个命令。
现在你可以使用你的本地仓库(在这个例子中为/home/user/.svk/local
),就好像它是一个普通的SVN仓库一样!
这种方法的唯一问题是,本地存储库是通过远程存储库中的实际修订版本来增加版本来创build的。 正如有人写道:
svk miror命令在刚创build的仓库中生成一个提交。 因此,与远程公共存储库相比,由后续同步创build的所有提交都将修订号增加1。
但是,这对我来说是好的,因为我只想要一些远程存储库的备份,没有别的。
validation:
要validation,像这样使用本地存储库的SVN客户端:
svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/" <local-dir-path-to-checkout-onto>
这个命令然后去检查本地仓库中的最新版本。 最后说它Checked out revision N
这个N
比在远程仓库中find的实际版本多一个(由于上面提到的问题)。
为了validationsvk是否带来了所有的历史logging,SVN checkout使用带有-r
等等的-r
运行在各种旧版本中。然后, <local-dir-path-to-checkout-onto>
in <local-dir-path-to-checkout-onto>
的文件被确认为从那个修改。
最后,压缩目录C:/Documents and Settings\nverma/.svk/local/
并将压缩文件存储在某处。 定期做这个。
正如其他人所说,从Subversion团队hot-backup.py有一些不错的function,只是简单的svnadmin hotcopy
我在一台python脚本上运行一个计划任务,这个脚本为我机器上的所有存储库提供了蜘蛛,并使用svnadmin svndump
在远程机器上保留了几天的hotcopies(腐败的偏执)和svnadmin svndump
。 到目前为止,恢复是非常容易的。
1.1从SVN(Subversion)存储库创build转储
svnadmin dump /path/to/reponame > /path/to/reponame.dump
真实的例子
svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump
1.2 Gzip创build的转储
gzip -9 /path/to/reponame.dump
真实的例子
gzip -9 /backups/testrepo.dump
1.3 SVN转储和Gzip转储单线程
svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz
真实的例子
svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz
如何备份(转储)和恢复(加载)Linux上的SVN(Subversion)存储库。
参考: SVN颠覆备份和恢复