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脚本,它将:

  1. 备份回购
  2. 通过SCP复制到另一台服务器
  3. 检索备份
  4. 从备份创buildtesting存储库
  5. 做一个testing结帐
  6. 通过电子邮件与您的任何错误(通过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在这里可以很好地适用,因为它可以自动停止和启动服务,并且可以执行增量备份,因此您只备份最近更改的部分存储库(如果存储库很大,并且备份到远程位置)。

例:

  1. 安装Cobian备份
  2. 添加备份任务:

    • 将源设置为存储库文件夹(例如C:\Repositories\ ),

    • 添加预备份事件"STOP_SERVICE" VisualSVN,

    • 添加备份后事件"START_SERVICE" VisualSVN,

    • 根据需要设置其他选项。 我们已经设置了增量备份,包括删除旧备份,备份计划,目的地,压缩包括。 档案分割等

  3. 利润!

这里有一个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颠覆备份和恢复