增量备份必须基于上一次全量或增量的结束版本号,用svnlook youngest获取当前最新版,按版本序号连续导出,文件名体现起止版本,并用脚本自动维护last_rev.txt记录。

直接用 svnadmin dump --incremental 做增量备份,核心在于“记住上一次全量或增量的结束版本号”,并确保每次只导出新增的修订(revision)——不是按时间,而是按版本序号连续递增。
明确增量备份的前提条件
增量备份不是独立存在的,它必须依赖一个已知的基准点:
- 要么基于某次全量备份的最终版本号(比如全量备份到了 r73881,下一次增量就从 r73882 开始)
- 要么基于上一次增量备份的结束版本号(比如上次增量导出了 r73882:73900,这次就从 r73901 开始)
- 必须用
svnlook youngest实时获取当前最新版本号,不能靠文件名或日期推算 - 所有 dump 文件必须按顺序加载,不能跳过中间任意一个增量包
标准增量备份操作步骤
假设仓库路径为 /data/svn/myproj,上一次全量备份止于 r1000,当前最新版本是 r1050:
- 先查最新版本:
svnlook youngest /data/svn/myproj→ 输出1050 - 执行增量导出:
svnadmin dump /data/svn/myproj -r 1001:1050 --incremental > /backup/myproj_inc_1001-1050.dump - 导出完成后,立即记录本次结束版本号(1050),供下次使用
- 建议在文件名中体现起止版本,例如
myproj_inc_1001-1050.dump,避免后续混淆
配合脚本实现自动化增量备份
手动记版本号容易出错,推荐用简单 shell 脚本自动衔接:
- 维护一个文本文件
/backup/myproj/last_rev.txt,只存一个数字(如1000) - 每次备份前读取该值:
LAST=$(cat /backup/myproj/last_rev.txt) - 获取当前最新版本:
CURRENT=$(svnlook youngest /data/svn/myproj) - 若
$CURRENT > $LAST,则执行:svnadmin dump /data/svn/myproj -r $((LAST+1)):$CURRENT --incremental > /backup/myproj_inc_${LAST}_to_${CURRENT}.dump - 更新记录:
echo $CURRENT > /backup/myproj/last_rev.txt
关键细节与避坑提醒
增量备份看似简单,但几个细节决定成败:
-
--incremental必须加,否则即使指定了版本范围,也会导出完整快照(非增量格式),导致后续 load 失败 - dump 文件之间不能有版本空缺,比如导出 r1001:1020 和 r1022:1050,漏掉 r1021 就无法完整还原
- dump 文件不包含
conf/passwd和conf/authz,这些配置需单独备份(建议用 tar 打包整个仓库 conf 目录) - 不要混用
dump和hotcopy的备份策略——前者是逻辑备份,后者是物理镜像,不可交叉还原
真正可靠的增量机制,不靠频率多,而靠版本链不断、记录准、加载顺序对。做到这三点,就能稳定支撑数年无故障备份。











