问题的第一部分,我可以如何做增量备份的SVN仓库? 什么是命令做到这一点…….我怎么能自动做到这一点(OS + UNIX)
如果您想自己动手,请查看“svnlook最年轻”和“svnadmin dump –incremental -r $ {STARTREV}:$ {ENDREV}”命令。
我粘贴了我用来完成和增量转储SVN存储库的脚本,它们将最新备份的修订和date存储在/ home / svn / var的子目录中。 首先进行全面转储,然后根据需要进行尽可能多的增量转储。
完整的SVN转储脚本:
#!/bin/sh # Full dump of all subversion repositories # make sure to get the subversion environment variables . /etc/profile.d/subversion.sh # path to subversion binaries SVN_BINPATH=${SVN_HOME}/bin # path to parent of all repositories to be dumped SVN_REPPATH=/opt/svn/repositories # destination directory for backup files DUMP_DIR=/backup/svn # status directory SVN_VAR=/home/svn/var DATETIME=`date +%Y%m%d` for rep in ${SVN_REPPATH}/*; do TSTAMP=`date +%s` CURR_REV=`${SVN_BINPATH}/svnlook youngest ${rep}` REP_BASE=`basename $rep` echo "**********************************************************" echo "`date --rfc-2822` - Full back up - ${rep} : " echo " current revision ${CURR_REV}" echo DUMPFILE=${DUMP_DIR}/${REP_BASE}-${DATETIME}.dmp ${SVN_BINPATH}/svnadmin --quiet dump $rep > ${DUMPFILE} echo ${TSTAMP} > ${SVN_VAR}/status/dates/${REP_BASE}.dt echo ${CURR_REV} > ${SVN_VAR}/status/revisions/${REP_BASE}.rev bzip2 --compress --best ${DUMPFILE} done echo echo `ls -hl ${DUMP_DIR}/*.bz2`
增量SVN转储脚本:
#!/bin/sh # Incremental dump of all subversion repositories # make sure to get the subversion environment variables . /etc/profile.d/subversion.sh # path to subversion binaries SVN_BINPATH=${SVN_HOME}/bin # path to parent of all repositories to be dumped SVN_REPPATH=/opt/svn/repositories # destination directory for backup files DUMP_DIR=/backup/svn # status directory SVN_VAR=/home/svn/var DATETIME=`date +%Y%m%d` for rep in ${SVN_REPPATH}/*; do TSTAMP=`date +%s` CURR_REV=`${SVN_BINPATH}/svnlook youngest ${rep}` REP_BASE=`basename $rep` if [ -e ${SVN_VAR}/status/dates/${REP_BASE}.dt ] ; then REP_LAST_BK_TSTAMP=`cat ${SVN_VAR}/status/dates/${REP_BASE}.dt` REP_LAST_BK_REV=`cat ${SVN_VAR}/status/revisions/${REP_BASE}.rev` else REP_LAST_BK_TSTAMP=0 REP_LAST_BK_REV=0 fi if [ ${CURR_REV} -gt ${REP_LAST_BK_REV} ] ; then echo "**********************************************************" echo "`date --rfc-2822` - Incremental back up ${rep} : " echo " oldest revision ${REP_LAST_BK_REV} - newest revision ${CURR_REV}" echo DUMPFILE=${DUMP_DIR}/${REP_BASE}-${DATETIME}-${REP_LAST_BK_REV}-${CURR_REV}.dmp ${SVN_BINPATH}/svnadmin --quiet dump $rep --incremental -r${REP_LAST_BK_REV}:${CURR_REV}> ${DUMPFILE} echo ${TSTAMP} > ${SVN_VAR}/status/dates/${REP_BASE}.dt echo ${CURR_REV} > ${SVN_VAR}/status/revisions/${REP_BASE}.rev bzip2 --compress --best ${DUMPFILE} fi done echo echo `ls -hl ${DUMP_DIR}/*.bz2`
希望这可以帮助。
由于声誉不能评论上述内容,但所显示的脚本有一个错误 :每个增量备份中的最后一个修订版本也作为第一个修订版本在下一个版本中被转储,即它们重叠一个:例如,
repository-20171115-1-3.dmp # initial dump, contains rev. 1-3 repository-20171116-3-8.dmp # second dump, contains 3-8 (should be 4-8!) repository-20171116-8-15.dmp # third dump, contains 8-15 (should be 9-15!)
当使用“svn load”命令将转储装载回repo时,这会导致奇怪的问题 – 它会尝试加载相同的修订两次(大部分未检测到,但是如果文件已被添加或删除则会失败,因为svn会尝试执行再次行动)。 您仍然可以加载这些转储,但是您需要明确说明修订范围,以便在每个增量转储中省略第一个修订。