Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

the first part of question how i can make Incremental Backups of SVN Repository ? what is the command do this ....... and how i can do this automatically (OS + UNIX)

share|improve this question
    
Where do you want to backup to? Another server? Tape? –  dunxd Oct 26 '10 at 12:59
    
some svn on the same server and other on another server –  Mohammad AL-Rawabdeh Oct 26 '10 at 13:03
add comment

1 Answer

up vote 6 down vote accepted

If you want to do it yourself, look into the "svnlook youngest" and "svnadmin dump --incremental -r${STARTREV}:${ENDREV}" commands.

I have pasted below the scripts that I use to make full and incremental dumps of my SVN repositories, they store the revision and date of the last backup in subdirectories of /home/svn/var. Make a full dump first, then as many incremental dumps as you want.

Full SVN dump script:

#!/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`

Incremental SVN dump script:

#!/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`

Hope this helps.

share|improve this answer
    
I have defined the path to the Subversion installation $SVN_HOME in the /etc/profile.d/subversion.sh file: by importing this file I keep this definition in a single place only and I do not have to repeat it in the backup scripts. –  sebastianopilla Oct 27 '10 at 21:02
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.