进行 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
你见过文档关于这个?
基本上,你有两个选择:
- 使用以下方式执行增量备份
svnadmin dump
- 使用备份整个存储库
svnadmin hotcopy
只需复制目录即可不是一个选项,因为您的存储库在复制时可能会发生变化。
是否进行增量备份或完整备份取决于您的谨慎程度、存储库的大小、您的需求和您的基础设施。