SVN存储库备份策略
您可以使用类似(Linux的):
svnadmin dump repositorypath | gzip > backupname.svn.gz
因为Windows不支持gzip它仅仅是:
svnadmin dump repositorypath > backupname.svn
我不确定,但是确实有些工具比如7-zip能够压缩STDIN中的数据,这意味着你也可以在Windows上使用第一种风格。 – nickf 2009-04-26 12:06:53
我只是在看我自己和一个评论从文档http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.backup是你'会得到一个非常大的svnadmin转储输出,除非你使用--deltas选项。 – 2009-10-14 20:22:26
而且Windows不支持gzip,从unxutils网页http://unxutils.sourceforge.net/ – 2009-10-14 20:24:08
我喜欢将整个repo目录复制到备份位置。这样,如果发生什么事情,您可以将目录复制回来,并立即准备好。
只要确保保留权限,如果需要的话。通常,这只是Linux机器上的一个问题。
这不是如果有人在复制操作中进行提交,则确实很安全 - 即使只有4人可以访问回购站并且很少使用回收站,我也遇到过这种情况。请参阅Duncan关于使用hotcopy的答案。 – nickf 2009-04-26 12:08:45
但是,如果您完全独立工作,那么我认为这是备份回购的安全方法?我为我的个人项目使用颠覆,这就是我目前正在做的事情。 – 2011-02-04 02:45:58
您可以创建一个存储库备份(转储 )与
svnadmin dump
。然后,您可以使用
svnadmin load
导入它。
在SVNBook详细参考: "Repository data migration using svnadmin"
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
此子命令,使您的存储库的完全“热”备份,包括所有的钩子,配置文件和当然还有数据库文件。
在Subversion网站上有一个hotbackup.py脚本,这对于自动备份非常方便。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
如果您使用的是FSFS版本库格式(默认),那么您可以复制库本身进行备份。使用较旧的BerkleyDB系统时,存储库不是平台独立的,您通常需要使用svnadmin转储。
svnbook documentation topic for backup建议使用svnadmin hotcopy
命令,因为它将处理诸如正在使用的文件等问题。
我们使用的svnadmin hotcopy但,如:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
按the book:
你可以在任何时候运行这个命令,对资料库的安全拷贝,不管其它进程正在使用存储库。
你当然可以ZIP(最好是7-Zip)备份副本。恕我直言,这是最直接的备份选项:在发生灾难的情况下,除了将其解压缩到位之外,几乎没有什么可做的。
我使用svnsync,它将远程服务器设置为镜像/从属。我们有一台服务器在两周前停止运行,我可以很轻松地将主机切换到主要位置(只需将从属存储库上的UUID重置为原始位置)。
另一个好处是,同步可以由中间人来运行,而不是作为任一服务器上的任务运行。我有一个客户端让两个VPN在它们之间同步一个存储库。
正如其他人所说,从Subversion团队hot-backup.py拥有超过只是普通svnadmin hotcopy
我一个python脚本运行的计划任务蜘蛛为我的机器上的所有存储库,以及一些不错的功能使用hotbackup来保存几天的hotcopies(腐败的偏执狂)和一个远程机器上的svnadmin svndump
。到目前为止恢复非常简单。
这里是一个Perl脚本,将:
- 备份回购
- 通过SCP
- 检索备份
- 从备份创建一个测试版本库将其复制到另一台服务器
- 做一个测试结账
- 通过电子邮件与任何错误(通过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`;
Script source and more details about the rational for this type of backup.
有两种主要的方法来备份svn服务器,第一种是hotcopy,它会创建你的存储库文件的副本,这种方法的主要问题是它保存有关底层文件系统的数据,所以你可能会有一些尝试在另一台svn服务器或另一台机器上重新发布这种备份的困难。 还有另一种类型的备份称为转储,这不会备份保存底层文件系统的任何信息和饮用水,以立足tigiris.org颠覆任何类型的SVN服务器。
你可以使用svnadmin工具中的备份工具(这是能够做到即时拷贝和转储)从命令提示符,这个控制台驻留在同一目录下你的svn服务器的生活,或者你可以谷歌SVN备份工具。
我的建议是,你可以进行两种备份并将它们从办公室转移到您的电子邮件帐户,亚马逊s3服务,ftp或azure服务,这样您将拥有安全备份,而无需托管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
内创建一组文件。
要更新最新的一组从远程一个变化的这个本地仓库,刚刚从时间运行前面的命令时。
现在你可以用你的本地库(/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/
和一些地方保存拉链。定期继续这样做。
@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
这是批处理文件我已经运行执行我的备份
基本上它是安全的,如果svn的服务器停止复制的存储库文件夹。 (来源:https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D)
所以,如果你被允许停止服务器,做到这一点,刚才复制的资源库,无论是与一些脚本或备份工具。 Cobian备份很好地适合在这里,因为它可以停止和自动启动的服务,并且它可以做增量备份,所以你只备份最近更改过的存储库的部分(有用的,如果存储库是大,你是备份到远程位置)。
实施例:
- 安装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库来允许在独立模式下创建转储,而无需任何其他附加工具。
希望这有助于...
1.1 SVN(颠覆)存储库中创建转储
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转储和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
如何备份(转储)和恢复(装载)SVN(颠覆)库在Linux上。
编号:svn subversion backup andrestore
VisualSVN服务器的Windows包括了时间表内置功能来备份和验证SVN仓库:https://www.visualsvn.com/server/features/backup/ – bahrep 2017-03-23 18:45:18