svnadmin hotcopy 可在svn服务持续运行时完成热备份,无需停机;它通过原子级拷贝机制协调数据库锁、事务日志和文件系统状态,确保一致性,且不中断服务或影响客户端操作。

svnadmin hotcopy 可以在 SVN 服务持续运行时完成备份,全程无需停机,是中小型仓库最实用的热备份方案。
为什么 hotcopy 能不暂停服务
hotcopy 是 Subversion 官方提供的原子级拷贝机制,它内部会协调数据库锁、事务日志和文件系统状态,确保正在被读写的仓库文件(如 db/ 目录下的 revs、logs、current 等)被一致地复制。只要原始仓库没被强制 kill 或磁盘损坏,备份过程就不会中断服务,也不会导致客户端提交失败或检出异常。
基础命令格式与关键参数
标准用法很简单:
-
基本命令:
svnadmin hotcopy - --clean-logs:备份完成后自动清理源仓库中已归档的日志(db/logs/),节省空间,推荐加上
- --ignore-uuid:若需将备份库作为独立新仓库使用(比如迁移或测试),可加此参数避免 UUID 冲突
- 注意:目标路径不能已存在,否则命令会报错退出
Windows 下批处理脚本示例
以每天 23:59 自动执行为例,保存为 svn_hotbak.bat:
@echo off
set REPOS_ROOT=E:\svn\repos
set BACKUP_ROOT=F:\svn_backup
set DATESTR=%date:~5,2%%date:~8,2%
set BACKUP_DIR=%BACKUP_ROOT%\%DATESTR%
if not exist "%BACKUP_DIR%" mkdir "%BACKUP_DIR%"
for /d %%i in ("%REPOS_ROOT%\*") do (
set REPO_NAME=%%~nxi
echo 正在备份 %%i ...
svnadmin hotcopy "%%i" "%BACKUP_DIR%\%%~nxi" --clean-logs >> "%BACKUP_ROOT%\backup.log" 2>&1
)
echo 备份完成:%DATE% %TIME% >> "%BACKUP_ROOT%\backup.log"
配合 Windows 任务计划程序设置每日触发即可。记得确认 svnadmin.exe 已加入系统 PATH,或在脚本开头用 set PATH=%PATH%;C:\Program Files\TortoiseSVN\bin 补全路径。
备份后必须做的验证动作
只跑完命令不等于备份可靠。建议每次备份后立即验证:
- 运行
svnlook youngest "",能正常输出最新版本号即说明结构完整 - 检查备份目录下是否存在
conf/、db/、hooks/等关键子目录 - 可选:用
svnadmin verify ""全量校验(较慢,适合定期抽检)
不复杂但容易忽略











