SVN存储库备份策略

时间:2008-08-28 18:43:59

标签: windows svn backup

我是SVN的新手,我想知道在Windows环境中可以使用哪些方法备份存储库?

19 个答案:

答案 0 :(得分:177)

您可以使用类似(Linux)的内容:

svnadmin dump repositorypath | gzip > backupname.svn.gz

由于Windows不支持GZip,它只是:

svnadmin dump repositorypath > backupname.svn

答案 1 :(得分:106)

我们使用svnadmin hotcopy,例如:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

根据the book

  

您可以随时运行此命令并制作存储库的安全副本,无论其他进程是否正在使用存储库。

您当然可以使用ZIP(最好是7-Zip)备份副本。恕我直言这是备份选项中最直接的选择:在发生灾难的情况下除了将其解压缩到位之外别无他法。

答案 2 :(得分:24)

Subversion网站上有一个hotbackup.py脚本,可以自动备份。

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in

答案 3 :(得分:22)

这是一个Perl脚本:

  1. 备份回购
  2. 通过SCP将其复制到另一台服务器
  3. 检索备份
  4. 从备份
  5. 创建测试存储库
  6. 进行测试结帐
  7. 通过电子邮件向您发送任何错误(通过cron)
  8. 剧本:

    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`;
    

    Script source and more details about the rational for this type of backup.

答案 4 :(得分:19)

我使用svnsync,它将远程服务器设置为镜像/从属服务器。两个星期前我们有一台服务器停机,我能够很容易地将奴隶切换到主要位置(只需将奴隶库中的UUID重置为原始服务器)。

另一个好处是同步可以由中间人运行,而不是作为任一服务器上的任务。我有一个客户端,两个VPN同步它们之间的存储库。

答案 5 :(得分:11)

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
  

此子命令对存储库进行完整的“热”备份,包括所有挂钩,配置文件,当然还有数据库文件。

答案 6 :(得分:10)

SVNBook中的详细参考: "Repository data migration using svnadmin"

答案 7 :(得分:10)

svnbackup在Google Code上,一个.NET控制台应用程序。

答案 8 :(得分:5)

如果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. 利润!

答案 9 :(得分:4)

备份svn服务器有两种主要方法,首先是将创建存储库文件副本的hotcopy,这种方法的主要问题是它保存了有关底层文件系统的数据,因此可能会遇到一些困难试图在另一个svn服务器类或另一台机器上重新发布这种备份。 还有另一种类型的称为dump的备份,这个备份不会将基础文件系统的任何信息保存到基于tigiris.org subversion的任何类型的SVN服务器。

关于可以从命令提示符使用svnadmin工具(它能够进行热拷贝和转储)的备份工具,此控制台位于svn服务器所在的同一目录中,或者您可以谷歌搜索svn备份工具。 / p>

我的建议是你做两种备份并将它们从办公室带到你的电子邮件帐户,亚马逊s3服务,ftp或azure服务,这样你就可以获得安全备份,而无需托管svn服务器离开办公室的地方。

答案 10 :(得分:4)

这是一个GUI Windows工具,用于转储本地和远程subversion存储库:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

工具说明说:

这个简单的工具允许对本地和远程subversion存储库进行转储备份。该软件的工作方式与&#34; svnadmin&#34;相同。但它不是一个GUI前端。而是直接使用subversion库,允许在独立模式下创建转储,而无需任何其他工具。

希望这有帮助...

答案 11 :(得分:3)

如果您使用的是FSFS存储库格式(默认值),则可以复制存储库本身以进行备份。使用较旧的BerkleyDB系统,存储库不依赖于平台,您通常希望使用svnadmin转储。

svnbook documentation topic for backup建议使用svnadmin hotcopy命令,因为它会处理正在使用的文件等问题。

答案 12 :(得分:3)

我喜欢将整个repo目录复制到我的备份位置。这样,如果发生了某些事情,您可以将目录复制回来并准备立即进行。

如果需要,请确保保留权限。通常,这只是Linux机器上的一个问题。

答案 13 :(得分:3)

对于托管存储库,您可以从svn版本1.7开始使用svnrdump,这类似于本地存储库的svnadmin dump。这个article提供了一个很好的演练,主要归结为:

svnrdump dump /URL/to/remote/repository > myRepository.dump

下载转储文件后,您可以在本地导入

svnadmin load /path/to/local/repository < myRepository.dump

或将其上传到您选择的主机。

答案 14 :(得分:2)

对于每日和完整备份解决方案,只需使用SVN backup scripts here

答案 15 :(得分:2)

@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

这是我运行的批处理文件,用于执行我的备份

答案 16 :(得分:1)

为了备份远程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内创建了一组文件。

要使用远程更改中的最新更改来更新此本地存储库,只需不时运行上一个命令。

现在您可以使用本地存储库(在此示例中为/home/user/.svk/local),就好像它是一个普通的SVN存储库一样!

此方法的唯一问题是本地存储库是使用远程存储库中的实际修订版本的修订增量创建的。有人写道:

  

svk miror命令在刚创建的存储库中生成提交。因此,与远程公共存储库相比,后续同步创建的所有提交都将使修订号加1。

但是,这对我来说没问题,因为我只想要一些备份远程存储库的时间,没有别的。

验证

要验证,请将SVN客户端与本地存储库一起使用,如下所示:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

然后,此命令将从本地存储库中签出最新修订。最后它说Checked out revision N。这个N比远程存储库中的实际修订版多一个(由于上面提到的问题)。

为了验证svk是否还带来了所有历史记录,SVN结帐使用-r使用2,10,50等运行各种旧版本。然后<local-dir-path-to-checkout-onto>中的文件被确认来自那次修改。

最后,压缩目录C:/Documents and Settings\nverma/.svk/local/并将zip存储在某处。要经常这样做。

答案 17 :(得分:0)

正如其他人所说,来自Subversion团队的hot-backup.py有一些不错的功能而不仅仅是svnadmin hotcopy

我在python脚本上运行一个计划任务,该脚本为机器上的所有存储库提供蜘蛛,并使用hotbackup在远程计算机上保留几天的热门文件(贪婪的妄想)和svnadmin svndump。到目前为止,恢复非常简单。

答案 18 :(得分:0)

1.1从SVN(Subversion)存储库创建转储

svnadmin dump /path/to/reponame > /path/to/reponame.dump

真实示例

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Gzip创建转储

gzip -9 /path/to/reponame.dump

真实示例

gzip -9 /backups/testrepo.dump

1.3 SVN Dump和Gzip Dump with One-liner

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 subversion backup andrestore