进行 Subversion 备份的最佳方法是什么?

Joh*_*han 10 backup debian svn

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

是使用svnadmin吗?

svnadmin dump /path/to/reponame > reponame.dump
Run Code Online (Sandbox Code Playgroud)

或者也许只是为了 tar 存储库所在的目录?

tar -cvzf svn.backup.tar.gz /var/subversion/
Run Code Online (Sandbox Code Playgroud)

以上各有什么优缺点?

谢谢约翰


更新:这是一个只有少量存储库的小型服务器。所以增量备份可能不需要,我认为最好专注于保持简单。

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

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

Sco*_*ack 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
Run Code Online (Sandbox Code Playgroud)


inn*_*naM 9

你看过这方面的文档吗?

基本上,您有两种选择:

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

简单地制作目录的副本不是一种选择,因为在制作副本时您的存储库可能会更改。

您是使用增量备份还是完整备份取决于您的偏执程度、存储库的大小、您的需求和您的基础设施。


And*_*oid 5

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

为什么这很重要?好吧,如果您有一个大型开发团队,并且每天都有 Subversion 备份,并且您的系统在旧备份 12 小时后出现故障,那么一整天的工作都会丢失。

如果您每天多次进行完整备份( SVN 热复制),则会给存储库计算机带来不必要的负载,这会激怒不耐烦的开发人员。

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