进行Subversion备份的最佳方法?


10

进行Subversion备份的最佳方法是什么(在基于Debian的服务器上)。

使用svnadmin吗?

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

还是只是要压缩存储库所在的目录?

tar -cvzf svn.backup.tar.gz /var/subversion/

上面的优点和缺点是什么?

谢谢约翰


更新:这是一台只有少量存储库的小型服务器。因此,可能不需要增量备份,我认为最好集中精力使其简单。

更新:我使用packs包装器脚本(反过来是svn-hot-backup的包装器)进行完整备份,然后在另一台干净的计算机上进行了完全恢复。但是,我删除了“ SVN_HOTBACKUP_NUM_BACKUPS = 10”部分,因为它不适用于我。

请注意,我觉得这很简单,结果非常接近tar dir。但是正如曼尼在这里指出的那样,使用svn-hot-backup /“ svnadmin hotcopy”是一种更可靠的方法,因为如果您不走运,tar可能会不时创建损坏的备份。

Answers:


11

查找svn-hot-backup脚本。它应该随Subversion一起提供,并且包含执行所需功能的所有逻辑,以及自动将旧备份推出。我编写了以下包装器脚本,该脚本使用svn-hot-backup作为夜间cronjob来运行,以备份具有多个存储库的单个服务器,并稍作修改以使其通用化。

#!/bin/bash

#
# Dumps the svn repos to a file and backs it up
# to a local directory.

#Keeps the last 10 revisions
REPODIR="/var/repos"
BAKDIR="/data/backup/svn"
PROG="/usr/local/sbin/svn-hot-backup"
REPOLIST='repo1 repo2 repo3'

if [ ! -x "${PROG}" ]
then
        echo "svnbak: Could not execute \`${PROG}\`"
        exit 1
fi

for repo in ${REPOLIST}
do
    # Dump the database to a backup file
    echo "svnbak: Dumping subversion repository:  ${repo}"
    SVN_HOTBACKUP_NUM_BACKUPS=10 nice ${PROG} --archive-type=gz ${REPODIR}/${repo} ${BAKDIR}/${repo} &> /tmp/svnbak.$$

    if [ "$?" -eq "1" ]
    then
        echo "svnbak: Hot backup on '${repo}' failed with message:"
        /bin/cat /tmp/svnbak.$$
    fi

    /bin/rm /tmp/svnbak.$$
done

exit 0

1
并且由于这是svnadmin hotcopy的包装,我想恢复一下就可以将文件复制到/ var / subversion / repos /下?我还需要做其他事情吗?
约翰

“ svnadmin verify”也是脚本的一个很好的补充,可以验证您刚刚复制的存储库是否有效。
2009年

@Johan-是的,只需复制它们即可。“最终的备份是一个功能齐全的Subversion存储库,如果发生严重错误,可以将其替换为实时存储库的替代品。” 从svnbook.red-bean.com/nightly/en/…–约尼克
Jonik)2009年

您也可以使用find命令搜索仅在过去N天内更改过的任何存储库。只需在find命令的输出中搜索“ db / current”。这样的好处是您不需要不断更新该REPOLIST变量。同样,在SVN 1.8中,您将不再需要热拷贝到空的目的地,但是将能够追加到先前的热拷贝。这可能会将热拷贝备份速度提高2-3个数量级。
tgharold

9

您看过有关此文档吗?

基本上,您有两种选择:

  1. 使用执行增量备份 svnadmin dump
  2. 使用备份您的整个存储库 svnadmin hotcopy

简单地使目录中的副本是不是一种选择,因为在副本正在取得你的资料库可能会改变。

进行增量备份还是完全备份取决于您的妄想量,存储库的大小,需求和基础架构。


4

我推荐SVNBackup,因为它能够执行增量备份

为什么这很重要?好吧,如果您有一个庞大的开发团队,并且每天都有一个Subversion备份,而您的系统在旧备份中失败了12个小时,那么整天的工作就会丢失。

如果一天执行多次完整备份(即SVN热拷贝),则会给存储库计算机造成不必要的负载,这会激怒不耐烦的开发人员。

作为奖励;我还建议将Backup-PC作为备份解决方案。如果您要在不同系统上备份相同的文件,它可以执行增量远程备份,并且可以节省大量空间。


4

我使用svnsync备份到其他只读存储库,该存储库本身已使用旧副本(天,周,月)进行备份



从手册“虽然有很少的方法可以做到这一点,但它的主要优势在于它可以远程操作”。
约翰

+1代表svnsync-喜欢dumphotcopy它肯定有它的用途。对于本地增量备份也可以非常方便。
约尼克,

而且,如果备份服务器位于其他位置,则只需一步即可解决许多恢复情况
Zac Thompson

1
如果要使用svnsync路由,有两件事:1)如果您有大型回购,以svnadmin hotcopy开始,因为它速度更快,并且可以备份/ db / revs之外的数据2)将svnsync调用添加到源回购中提交后挂钩,以便镜像始终处于最新状态。(但是要把它放在镜子的钩子外面,这样镜子就不会试图自己做镜子了!)
Robert Calhoun 2012年

2

如果需要,可以使用svnadmin进行增量备份,应该在创建tar存档之前运行hot-backup.py

这是有关备份svn仓库的文章。无论如何,阅读SVN书是一个不错的起点。


0

我用普通的旧rsync备份了多个100GB +的svn存储库。svnadmin dump并且svnadmin hotcopy在这些存储库上需要几天的时间。

要注意的另一件事是svnadmin dump没有备份锁和钩子脚本。


-1

这是我对存储库的处理方式:使用像Dropbox这样的文件夹备份服务(这是其Linux版本链接)。您只需将Dropbox设置为存储库的根目录(甚至更高),并且每次文件更改时都会对其进行备份。它不仅可以在计算机上使用,而且还可以在线访问并获得版本。

有几种这样的在线备份服务-大多数都免费提供2GB。


1
这对于小型个人回购协议是不错的选择,但几乎不是海报寻找的“最佳方法”。一个问题是您不能保证多个开发人员并发访问的一致性。备份的主要目标应该是可靠性和一致性,而不是在线访问和版本。
马丁·海姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.