SVN存储库备份策略
我是SVN的新手,我想知道哪些方法可用于在Windows环境中备份存储库?
解决方案
回答
我只想将整个repo目录复制到我的备份位置。这样,如果发生什么情况,我们可以将目录复制回去并准备立即使用。
只需确保保留权限(如果需要)。通常,这仅是Linux计算机上的一个问题。
回答
我们可以使用类似(Linux)的方法:
svnadmin dump repositorypath | gzip > backupname.svn.gz
由于Windows不支持GZip,因此只是:
svnadmin dump repositorypath > backupname.svn
回答
- 我们可以使用svnadmin dump`创建存储库备份(转储)。
- 然后可以使用
svnadmin load
将其导入。
SVNBook中的详细参考:
"使用svnadmin进行存储库数据迁移"
回答
svnadmin hotcopy
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
This subcommand makes a full “hot” backup of your repository, including all hooks, configuration files, and, of course, database files.
回答
Subversion网站上有一个hotbackup.py脚本,对于自动执行备份非常方便。
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
回答
如果使用的是FSFS存储库格式(默认),则可以复制存储库本身以进行备份。对于较旧的BerkleyDB系统,存储库不是独立于平台的,因此通常需要使用svnadmin dump。
备份的svnbook文档主题建议使用svnadmin hotcopy命令,因为它将处理诸如文件使用等问题。
回答
我们使用svnadmin hotcopy,例如:
svnadmin hotcopy C:\svn\repo D:\backups\svn\repo
根据这本书:
You can run this command at any time and make a safe copy of the repository, regardless of whether other processes are using the repository.
我们当然可以ZIP(最好是7-Zip)备份副本。恕我直言,这是最简单的备份选项:万一发生灾难,除了将其解压缩到位之外,别无他法。
回答
我使用svnsync,它将远程服务器设置为镜像/从服务器。两周前,我们有一台服务器宕机了,我能够轻松地将从服务器切换到主要位置(只需要将从服务器存储库上的UUID重置为原始服务器)。
另一个好处是,同步可以由中间人来运行,而不是作为任一服务器上的任务来运行。我有一个客户端,可以在两个VPN之间同步存储库。
回答
就像其他人所说的那样,Subversion团队的hot-backup.py比普通的svnadmin hotcopy具有一些不错的功能。
我在python脚本上运行了计划任务,该脚本在机器上的所有存储库中搜寻了蜘蛛,并使用hotbackup在远程机器上保留了几天的热副本(损坏的妄想症)和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`;
脚本源以及有关此类备份原理的更多详细信息。
回答
对于每日和完整备份解决方案,只需在此处使用SVN备份脚本。
回答
通过.NET控制台应用程序Google Code进行svnbackup。