脚本能自动备份SVN仓库吗?

wen 实用脚本 1

本文目录导读:

脚本能自动备份SVN仓库吗?

  1. 基础备份脚本(完整备份)
  2. 增量备份脚本(更节省空间)
  3. 远程备份(将备份传到其他服务器)
  4. 配置定时任务(Cron)
  5. 备份验证脚本
  6. 注意事项

基础备份脚本(完整备份)

#!/bin/bash
# SVN 完整备份脚本
# 配置参数
SVN_REPO_PATH="/var/svn/repos/myproject"
BACKUP_DIR="/backup/svn"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/svn_backup_$DATE.dump"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行完整备份(svnadmin dump)
echo "开始备份SVN仓库..."
svnadmin dump $SVN_REPO_PATH > $BACKUP_FILE
# 压缩备份文件
gzip $BACKUP_FILE
# 保留最近30天的备份
find $BACKUP_DIR -name "*.dump.gz" -mtime +30 -delete
echo "备份完成: ${BACKUP_FILE}.gz"

增量备份脚本(更节省空间)

#!/bin/bash
# SVN 增量备份脚本
SVN_REPO_PATH="/var/svn/repos/myproject"
BACKUP_DIR="/backup/svn"
DATE=$(date +%Y%m%d_%H%M%S)
LAST_BACKUP_FILE="$BACKUP_DIR/last_revision.txt"
# 获取当前最新版本号
CURRENT_REV=$(svnlook youngest $SVN_REPO_PATH)
# 如果是首次备份或需要完整备份
if [ ! -f "$LAST_BACKUP_FILE" ]; then
    echo "首次备份,执行完整备份..."
    svnadmin dump $SVN_REPO_PATH > $BACKUP_DIR/full_backup_$DATE.dump
    echo $CURRENT_REV > $LAST_BACKUP_FILE
else
    LAST_REV=$(cat $LAST_BACKUP_FILE)
    if [ $CURRENT_REV -gt $LAST_REV ]; then
        echo "从版本 $LAST_REV 增量备份到 $CURRENT_REV"
        svnadmin dump $SVN_REPO_PATH --incremental -r $((LAST_REV+1)):$CURRENT_REV > $BACKUP_DIR/inc_${LAST_REV}_to_${CURRENT_REV}_$DATE.dump
        echo $CURRENT_REV > $LAST_BACKUP_FILE
    else
        echo "无新版本,无需备份"
    fi
fi

远程备份(将备份传到其他服务器)

#!/bin/bash
# SVN 远程备份脚本
# 本地配置
SVN_REPO_PATH="/var/svn/repos/myproject"
TEMP_BACKUP="/tmp/svn_temp_backup.dump"
# 远程配置
REMOTE_HOST="backup-server.example.com"
REMOTE_USER="backup_user"
REMOTE_PATH="/backup/svn/repos"
# 生成备份
DATE=$(date +%Y%m%d_%H%M%S)
echo "正在创建临时备份..."
svnadmin dump $SVN_REPO_PATH > $TEMP_BACKUP
# 压缩
gzip $TEMP_BACKUP
BACKUP_FILE="${TEMP_BACKUP}.gz"
# 传输到远程服务器
echo "正在传输到远程服务器..."
scp $BACKUP_FILE ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}/svn_backup_$DATE.dump.gz
# 清理临时文件
rm -f $BACKUP_FILE
echo "远程备份完成"

配置定时任务(Cron)

添加定时执行备份(以每天凌晨2点为例):

# 编辑crontab
crontab -e
# 添加以下行
0 2 * * * /path/to/backup_script.sh >> /var/log/svn_backup.log 2>&1

备份验证脚本

#!/bin/bash
# SVN 备份验证脚本
BACKUP_FILE=$1
TEST_REPO="/tmp/svn_restore_test"
if [ -z "$BACKUP_FILE" ]; then
    echo "用法: $0 <备份文件路径>"
    exit 1
fi
# 解压(如果是.gz文件)
if [[ $BACKUP_FILE == *.gz ]]; then
    gunzip -k $BACKUP_FILE
    BACKUP_FILE="${BACKUP_FILE%.gz}"
fi
# 创建临时仓库并恢复
rm -rf $TEST_REPO
svnadmin create $TEST_REPO
svnadmin load $TEST_REPO < $BACKUP_FILE
if [ $? -eq 0 ]; then
    echo "备份文件验证成功!"
else
    echo "备份文件验证失败!"
fi
# 清理
rm -rf $TEST_REPO

注意事项

  1. 仓库锁定:备份期间,SVN仓库必须没有活动连接,建议在低峰期执行
  2. 磁盘空间:确保备份目录有足够空间(仓库大小×2)
  3. 测试恢复:定期在测试环境验证备份文件可用性
  4. 多份备份:遵循3-2-1备份原则(3份副本、2种介质、1份异地)

需要我帮你针对具体的SVN部署环境(版本、路径、备份频率)定制脚本吗?

抱歉,评论功能暂时关闭!