¿La mejor manera de hacer copias de seguridad de Subversion?

10

¿Cuál es la mejor manera de hacer copias de seguridad de Subversion (en un servidor basado en Debian)?

¿Es para usar svnadmin?

svnadmin dump /path/to/reponame > reponame.dump

¿O tal vez solo para manipular el directorio donde están los repositorios?

tar -cvzf svn.backup.tar.gz /var/subversion/

¿Cuáles son los pros y los contras de lo anterior?

Gracias Johan


Actualización : este es un servidor pequeño con solo un puñado de repositorios. Por lo tanto, las copias de seguridad incrementales probablemente no sean necesarias, creo que es mejor centrarse en mantenerlo simple.

Actualización : utilicé la secuencia de comandos del paquete de paquetes (que a su vez era un paquete para svn-hot-backup) para hacer una copia de seguridad completa y luego hice una recuperación completa en otra computadora limpia. Sin embargo, eliminé esa parte "SVN_HOTBACKUP_NUM_BACKUPS = 10" ya que no funcionaba para mí.

Tenga en cuenta que siento que fue un poco simple y el resultado estuvo muy cerca de solo el directorio. Pero como Manni señaló aquí para usar svn-hot-backup / "svnadmin hotcopy" es un método más confiable, ya que tar podría crear copias de seguridad corruptas de vez en cuando si no tiene suerte.

Johan
fuente

Respuestas:

11

Busque el script svn-hot-backup. Debe enviarse con subversión y contiene toda la lógica para hacer lo que desee, además de la implementación automática de copias de seguridad antiguas. He escrito el siguiente script de envoltura que usa svn-hot-backup para ejecutarse como un cronjob nocturno para respaldar un único servidor con múltiples repositorios, ligeramente modificado para generalizar.

#!/bin/bash

#
# Dumps the svn repos to a file and backs it up
# to a local directory.

#Keeps the last 10 revisions
REPODIR="/var/repos"
BAKDIR="/data/backup/svn"
PROG="/usr/local/sbin/svn-hot-backup"
REPOLIST='repo1 repo2 repo3'

if [ ! -x "${PROG}" ]
then
        echo "svnbak: Could not execute \`${PROG}\`"
        exit 1
fi

for repo in ${REPOLIST}
do
    # Dump the database to a backup file
    echo "svnbak: Dumping subversion repository:  ${repo}"
    SVN_HOTBACKUP_NUM_BACKUPS=10 nice ${PROG} --archive-type=gz ${REPODIR}/${repo} ${BAKDIR}/${repo} &> /tmp/svnbak.$$

    if [ "$?" -eq "1" ]
    then
        echo "svnbak: Hot backup on '${repo}' failed with message:"
        /bin/cat /tmp/svnbak.$$
    fi

    /bin/rm /tmp/svnbak.$$
done

exit 0
Scott Pack
fuente
1
Y dado que este es un contenedor para svnadmin hotcopy, supongo que para la recuperación solo copie los archivos en / var / subversion / repos /? ¿Necesito hacer algo más?
Johan
'svnadmin verificar' también sería una buena adición al script para verificar si el repositorio que acaba de copiar es, de hecho, válido.
Andrioid
@Johan: sí, solo cópialos. "La copia de seguridad resultante es un repositorio de Subversion completamente funcional, que puede colocarse como un reemplazo para su repositorio en vivo en caso de que algo salga terriblemente mal". de svnbook.red-bean.com/nightly/en/…
Jonik
También puede usar el comando find para buscar repositorios que solo hayan cambiado en los N días anteriores. Simplemente busque 'db / current' en la salida del comando find. Esto tiene la ventaja de que no necesita actualizar constantemente esa variable REPOLIST. Además, en SVN 1.8, ya no necesitará realizar una copia en caliente a un destino vacío, pero podrá agregar una copia en caliente anterior. Esto probablemente acelerará las copias de seguridad de copias en caliente en 2-3 órdenes de magnitud.
tgharold
9

¿Has visto la documentación sobre esto?

Básicamente, tienes dos opciones:

  1. Realizar copias de seguridad incrementales usando svnadmin dump
  2. Copia de seguridad de todo su repositorio utilizando svnadmin hotcopy

Simplemente hacer una copia del directorio no es una opción porque su repositorio puede cambiar mientras se realiza la copia.

Si le gustan las copias de seguridad incrementales o completas depende de su cantidad de paranoia, el tamaño de su repositorio, sus necesidades y su infraestructura.

innaM
fuente
4

Estoy recomendando SVNBackup debido al hecho de que es capaz de hacer copias de seguridad incrementales .

¿Porque es esto importante? Bueno, si tiene un gran equipo de desarrollo y tiene una copia de seguridad diaria de Subversion y su sistema falla 12 horas en la copia de seguridad anterior, se pierde todo el día de trabajo.

Si realiza copias de seguridad completas (que es una copia de SVN ) muchas veces al día, está causando una carga innecesaria en su máquina de repositorio, lo que irritará a los desarrolladores impacientes.

Como un bono; También recomiendo Backup-PC como una solución de respaldo. Puede realizar copias de seguridad remotas incrementales y es capaz de ahorrar mucho espacio si realiza copias de seguridad de archivos idénticos en diferentes sistemas.

Andrioide
fuente
4

Utilizo svnsync para hacer una copia de seguridad en un repositorio de solo lectura, que está respaldado con copias antiguas (día, semana, mes)

Steven R. Loomis
fuente
Del manual "Y aunque hay pocas formas de hacerlo, su principal fortaleza es que puede operar de forma remota".
Johan
+1 por mencionar svnsync - like dumpy hotcopyciertamente tiene sus usos. Puede ser bastante útil también para copias de seguridad incrementales locales.
Jonik
Y si el servidor de respaldo está en una ubicación diferente, resuelve muchos casos de recuperación en un solo paso
Zac Thompson,
1
Dos cosas si va a ir a la ruta svnsync: 1) si tiene un repositorio grande, comience con una copia de svnadmin, ya que es mucho más rápido y respalda los datos más allá de / db / revs 2) agregue la llamada svnsync al repositorio de origen post-commit hook para que el espejo esté siempre actualizado. (¡Pero manténgalo fuera de los ganchos del espejo para que el espejo no intente reflejarse solo!)
Robert Calhoun
2

Puede hacer una copia de seguridad incremental con svnadmin si lo desea, debe ejecutar el hot-backup.py antes de hacer su archivo tar.

Aquí hay un artículo sobre cómo hacer copias de seguridad de repositorios svn. De todos modos, leer el libro SVN es un buen punto de partida como se dijo antes.

Maxwell
fuente
0

Respaldo varios repositorios svn de 100GB + con rsync antiguo. svnadmin dumpy svnadmin hotcopyllevaría días en estos repositorios.

Otra cosa a tener en cuenta es svnadmin dumpque no realiza copias de seguridad de bloqueos y secuencias de comandos de enlace.

kband
fuente
-1

Esto es lo que hago con mis repositorios: use un servicio de copia de seguridad de carpetas como Dropbox (aquí hay un enlace a su versión de Linux ). Simplemente haga que Dropbox sea la raíz de su repositorio (o incluso por encima) y se realizará una copia de seguridad cada vez que cambie un archivo. No solo estará disponible en todas las computadoras, sino que también podrás acceder a él en línea y tener versiones de él.

Existen varios servicios de respaldo en línea, la mayoría son gratuitos de hasta 2 GB.

Travelling Tech Guy
fuente
1
Esto está bien para pequeños repositorios personales, pero difícilmente es la "mejor manera" que busca el afiche. Un problema es que no puede garantizar la coherencia con el acceso simultáneo de múltiples desarrolladores. Los objetivos principales de una copia de seguridad deben ser la fiabilidad y la coherencia, en lugar del acceso y las versiones en línea.
Martijn Heemels