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

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

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

是不是要用svnadmin啊?

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

或者也许只是将存储库所在的目录打包成 tar?

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

上述各有何优缺点?

谢谢 Johan


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

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

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

答案1

查找 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

答案2

你见过文档关于这个?

基本上,你有两个选择:

  1. 使用以下方式执行增量备份svnadmin dump
  2. 使用备份整个存储库svnadmin hotcopy

只需复制目录即可不是一个选项,因为您的存储库在复制时可能会发生变化。

是否进行增量备份或完整备份取决于您的谨慎程度、存储库的大小、您的需求和您的基础设施。

答案3

我建议SVN备份因为它能够做到增量备份

为什么这很重要?如果你有一个大型开发团队,并且每天都有 Subversion 备份,而你的系统在旧备份开始 12 小时后出现故障,那么一整天的工作就都白费了。

如果你做了完整备份(SVN 热复制是) 每天你会多次给你的存储库机器造成不必要的负载,这会激怒没有耐心的开发人员。

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

答案4

您可以使用以下方式进行增量备份管理控制台如果你愿意,你应该运行热备份.py在制作 tar 存档之前。

这是一个文章关于备份 svn 存储库。无论如何,阅读SVN 书籍正如之前所说是一个很好的起点。

相关内容