SVN存储库备份策略

时间:2020-03-05 18:44:35  来源:igfitidea点击:

我是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。