SVN仓库定时增量备份

svnadmin dump命令可以导出指定的版本,可以通过cron计划任务定时执行脚本达到定时增量备份svn仓库的目的

增量备份svn脚本

创建备份脚本并赋予可执行权限/home/backup/svnbackup.sh

# !bin/bash

# svn仓库目录
repo=/home/svn/test

# 备份目录
src=/home/backup/test

#=======================================
# 脚本所在目录
basepath=$(cd "$(dirname "$0")";pwd)

# 配置文件
cfg=${basepath}/svn.conf

# 读取配置文件中上次备份版本
v0=
if [ -f $cfg ]; then
  v0=$(cat $cfg)
fi

if [ ! $v0 ]; then
  echo "未备份过,从0开始" 
  let v0=0
else
  echo "上次备份版本号: $v0" 
  let v0++
fi

# 查询当前仓库版本
v1=$(svnlook youngest ${repo})
echo "当前仓库版本号: $v1" 

if [ $v0 -gt $v1 ]
then
  echo "没有新增,无需备份"
  exit 0
fi

if [ ! -d "${src}" ]; then
  mkdir -p "${src}"
fi

# 备份文件
dumpfile=${src}/${v0}-${v1}.dump
if [ -f $dumpfile ]; then
  echo "当前仓库版已备份"
  echo $v1 > $cfg
  exit 0
fi

# 开始备份
let v0++
echo "备份仓库 $repo 版本号: $v0-$v1 -> $dumpfile"
svnadmin dump ${repo} -r ${v0}:${v1} --incremental > $dumpfile

# 写入配置文件
echo $v1 > $cfg
  • 这里要修改repo仓库所在目录
  • 修改备份文件绝对目录src
  • 备份时会在脚本所有目录生成一个svn.conf配置文件记录已经备份的最新版本号,如果不当文件不存在则从版本0开始备份,手动修改/删除配置文件会导致备份版本号出错。
  • 备份文件名为 开始版本号-结束版本号.dump

添加定时任务

crontab -e

# 每周日零晨3点备份
0 3 * * 0 /home/backup/svnbackup.sh

重启

systemctl restart crond
0%