Backups Incrementais do Repositório SVN diariamente? (OS = UNIX)

2

a primeira parte da pergunta como posso fazer Backups Incrementais do repositório SVN? qual é o comando fazer isso ....... e como eu posso fazer isso automaticamente (OS + UNIX)

    
por Mohammad AL-Rawabdeh 26.10.2010 / 14:47

2 respostas

9

Se você quiser fazer isso sozinho, consulte os comandos "svnlook youngest" e "svnadmin dump --incremental -r $ {STARTREV}: $ {ENDREV}".

Eu colei abaixo os scripts que utilizo para fazer dumps completos e incrementais de meus repositórios SVN, eles armazenam a revisão e a data do último backup em subdiretórios de / home / svn / var. Faça um dump completo primeiro, depois quantos dumps incrementais desejar.

Script completo de despejo do 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'

Script de despejo SVN incremental:

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

Espero que isso ajude.

    
por 26.10.2010 / 15:05
0

Não é possível comentar o acima devido a reputação, mas o script mostrado tem um bug : a última revisão em cada backup incremental também é lançada como primeira revisão na próxima, ou seja, eles se sobrepõem por um: Por exemplo,

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!)

Isso leva a problemas estranhos quando os dumps são carregados de volta para um repositório usando Comando "svn load" - ele tenta carregar a mesma revisão duas vezes (passa despercebido, mas falha se os arquivos foram adicionados ou excluídos, porque o comando svn tenta executar a ação novamente). Você ainda pode carregar esses dumps, mas precisa declarar explicitamente o intervalo de revisão para omitir a primeira revisão em cada dump incremental.

    
por 16.11.2017 / 09:12