Subversion代码库自动化备份脚本,通过dump命令进生全量或增量备份。将数据库中的仓库记录进行备份并记录备份日志,可设置定时任务,也可手动执行。
访问生成前端页面脚本

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#!/bin/bash # 最后更新:2025/07/21 # 脚本开发:刘智林 # 脚本功能:svn仓库备份脚本 # 将备份日志记录至MySQL数据库 # 备份规则:只保留最后一次全量备份数据 # - 全量bakType=0 FULL 或第一次或周六 # - 增量bakType=1 INCREASE或非周六时留空 # 参数说明: # - $1 留空或FULL或INCREASE # 仓库基本信息 baseDir="${PWD}" repoDir="/var/svn/svnrepos" backDir="/bak/svn/svnrepos" # 数据库信息 dbsUser="svnbackup" dbsPass="svnbackup@2025" dbsHost="10.10.100.101" # 数据表信息 repoTab="repository" backTab="repository_bak" getTime (){ nowTime=`date +'%Y%m%d%H%M%S'` } # 配置备份模式 bakType=1 [ "`date | awk '{print $1}'`" = "Sat" ] || [ "${1^^}" = "FULL" ] && bakType=0 [ "`date | awk '{print $1}'`" = "Sat" ] && [ "${1^^}" = "INCREASE" ] && bakType=1 [ ${bakType} -eq 0 ] && cmdType="" || cmdType="--incremental" # 获取项目列表 sqlCont="select repName from ${dbsUser}.${repoTab} WHERE repType = 'svn' AND disFlag = '1'" mysql -u ${dbsUser} -p${dbsPass} -h ${dbsHost} --batch --skip-column-names -e "${sqlCont}" > ${repoTab}.txt # 配置备份目录 [ ! -d ${backDir} ] && mkdir -p ${backDir} # 开始备份仓库 for repName in ${repoTab}.txt do # 跳过非法项目 [ ! -d ${repoDir}/${repName} ] && continue # 配置备份目录 [ ! -d ${backDir}/${repName} ] && mkdir -p ${backDir}/${repName} # 获取最新版本 lastVer=`svnlook youngest ${repoDir}/${repName}` [ -z "${lastVer}" ] && continue # 获取备份信息 sqlCont="select lastVer from ${dbsUser}.${backTab} WHERE repName = '${repName}' ORDER BY ID DESC LIMIT 1" lastBak=`mysql -u ${dbsUser} -p${dbsPass} -h ${dbsHost} --batch --skip-column-names -e "${sqlCont}"` # 配置备份方案 if [ -z "${lastBak}" ] then lastBak=0 [ ${bakType} -eq 1 ] && bakType=0 && cmdType="" fi if [ ${lastBak} -ge ${lastVer} ] then [ ${bakType} -eq 0 ] && lastBak=0 || continue else [ ${bakType} -eq 0 ] && lastBak=0 || lastBak=`expr ${lastBak} + 1` fi # 备份仓库数据 bakFile=0 rptData=0 getTime bgnTime="${nowTime}" svnadmin dump ${cmdType} --revision ${lastBak}:${lastVer} ${repoDir}/${repName} > ${backDir}/${repName}/${repName}_${bakType}_${nowTime}.bak [ $? -ne 0 ] && rptData=1 && rptMark="数据文件备份失败" || bakFile=`du -sh ${backDir}/${repName}/${repName}_${bakType}_${nowTime}.bak | awk '{print $1}'` sleep 0.1 # 备份仓库配置 cp -rf ${repoDir}/${repName}/conf ${backDir}/${repName}/ if [ $? -ne 0 ] then rptData=1 [ -z "${rptMark}" ] && rptMark="配置文件备份失败" || rptMark="${rptMark},配置文件备份失败" fi getTime endTime="${nowTime}" sleep 1 [ ${rptData} -eq 0 ] && rptMark="备份成功" # 入库备份日志 sqlCont="insert into ${dbsUser}.${backTab} (repName,bakType,lastVer,bgnTime,endTime,bakFile,rptData,rptMark) VALUES ('${repName}','${bakType}','${lastVer}','${bgnTime}','${endTime}','${bakFile}','${rptData}','${rptMark}')" mysql -u ${dbsUser} -p${dbsPass} -h ${dbsHost} -e "${sqlCont}" sleep 1 # 清理过期备份 [ ${bakType} -eq 0 ] && find ${backDir}/${repName}/ -mmin +1 -type f -name "${repName}_*_*.bak" | xargs rm -f sleep 3 done |
原创文章禁止转载:技术学堂 » Subversion仓库Dump自动化备份脚本

技术学堂














