Estrategias de respaldo del repositorio SVN


195

Soy nuevo en SVN y me gustaría saber qué métodos están disponibles para realizar copias de seguridad de repositorios en un entorno Windows.


1
VisualSVN Server para Windows incluye una función integrada para hacer copias de seguridad y verificar repositorios SVN según lo programado: visualsvn.com/server/features/backup
bahrep

Respuestas:


179

Podría usar algo como (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Como Windows no es compatible con GZip, es solo:

svnadmin dump repositorypath > backupname.svn

11
No lo sé con certeza, pero seguramente algunas herramientas como 7-zip podrían comprimir datos de STDIN, lo que significa que también podría usar el primer estilo en Windows.
nickf

55
Solo estoy mirando esto y un comentario de los documentos svnbook.red-bean.com/nightly/en/… es que obtendrás una salida muy grande de svnadmin dump, a menos que uses la opción --deltas.
Jason S

55
Y Windows admite gzip, solo obténgalo de la página web de unxutils unxutils.sourceforge.net
Jason S

52
Usando 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Esto creará un archivo llamado 'backup.7z' que contiene un solo archivo, 'backupname.svn', que es el resultado de svnadmin dump.
Matt

44
@Josh Stodola bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK

107

Utilizamos svnadmin hotcopy, por ejemplo:

svnadmin hotcopy C:\svn\repo D:\backups\svn\repo

Según el libro :

Puede ejecutar este comando en cualquier momento y hacer una copia segura del repositorio, independientemente de si otros procesos están utilizando el repositorio.

Por supuesto, puede ZIP (preferiblemente 7-Zip) la copia de seguridad. En mi humilde opinión, es la más sencilla de las opciones de copia de seguridad: en caso de desastre, hay poco que hacer además de descomprimirla en su posición.


13
Creo que el volcado de svnadmin se prefiere para las copias de seguridad por un par de razones. Ver svn.haxx.se/users/archive-2005-05/0842.shtml
daremon el

44
@daremon: le sugiero que lea las respuestas a las publicaciones a las que se vinculó, específicamente la que menciona que svnadmin dump no incluye los archivos de control del repositorio.
Powerlord

estrecha carrera, pero, yo voto por los svnadmin dump después de leer las respuestas sugeridas por R. Bemrose
mobibob

El comando hotcopy no sobrescribe ni incrementa las copias de seguridad que genera. Entonces, si planea automatizarlo en Windows utilizando el programador de tareas, consulte el siguiente archivo por lotes: cfchimp.com/wordpress/2008/05/…
Ryan Sampson

1
Una palabra de advertencia. ¡No copie en caliente una copia espejo de svnsync'd de un repositorio mientras se está ejecutando svnsync! La copia resultante puede estar dañada. Vea este hilo para más detalles: subversion.open.collab.net/ds/…
zvolkov


22

Aquí hay un script de Perl que:

  1. Copia de seguridad del repositorio
  2. Cópielo a otro servidor a través de SCP
  3. Recuperar la copia de seguridad
  4. Crear un repositorio de prueba desde la copia de seguridad
  5. Hacer un pago de prueba
  6. Enviarle un correo electrónico con cualquier error (a través de cron)

La secuencia de comandos:

my $svn_repo = "/var/svn";  
my $bkup_dir = "/home/backup_user/backups";
my $bkup_file = "my_backup-";
my $tmp_dir = "/home/backup_user/tmp";   
my $bkup_svr = "my.backup.com";
my $bkup_svr_login = "backup";

$bkup_file = $bkup_file . `date +%Y%m%d-%H%M`;
chomp $bkup_file;
my $youngest = `svnlook youngest $svn_repo`;
chomp $youngest;

my $dump_command = "svnadmin  -q dump $svn_repo > $bkup_dir/$bkup_file ";
print "\nDumping Subversion repo $svn_repo to $bkup_file...\n";
print `$dump_command`;
print "Backing up through revision $youngest... \n";
print "\nCompressing dump file...\n";
print `gzip -9 $bkup_dir/$bkup_file\n`;
chomp $bkup_file;
my $zipped_file = $bkup_dir . "/" . $bkup_file . ".gz";
print "\nCreated $zipped_file\n";
print `scp $zipped_file $bkup_svr_login\@$bkup_svr:/home/backup/`;
print "\n$bkup_file.gz transfered to $bkup_svr\n";

#Test Backup
print "\n---------------------------------------\n";
print "Testing Backup";
print "\n---------------------------------------\n";
print "Downloading $bkup_file.gz from $bkup_svr\n";
print `scp $bkup_svr_login\@$bkup_svr:/home/backup/$bkup_file.gz $tmp_dir/`;
print "Unzipping $bkup_file.gz\n";
print `gunzip $tmp_dir/$bkup_file.gz`;
print "Creating test repository\n";
print `svnadmin create $tmp_dir/test_repo`;
print "Loading repository\n";
print `svnadmin -q load $tmp_dir/test_repo < $tmp_dir/$bkup_file`;
print "Checking out repository\n";
print `svn -q co file://$tmp_dir/test_repo $tmp_dir/test_checkout`;
print "Cleaning up\n";
print `rm -f $tmp_dir/$bkup_file`;
print `rm -rf $tmp_dir/test_checkout`;
print `rm -rf $tmp_dir/test_repo`;

Fuente del script y más detalles sobre lo racional para este tipo de copia de seguridad.


19

Uso svnsync , que configura un servidor remoto como espejo / esclavo. Hace dos semanas, un servidor dejó de funcionar y pude cambiar el esclavo a la posición primaria con bastante facilidad (solo tuve que restablecer el UUID en el repositorio de esclavos al original).

Otro beneficio es que la sincronización puede ser ejecutada por un intermediario, en lugar de como una tarea en cualquiera de los servidores. He tenido un cliente para dos VPN que sincronizan un repositorio entre ellos.


entonces, ¿sincroniza las últimas versiones de repositorio entre los dos obviamente?
PositiveGuy

1
Aunque está en el título, no sé si lo llamaría "sincronización". Realmente es una copia de seguridad, donde tomará revisiones en el maestro y las pondrá en el esclavo. Si hicieras modificaciones en el esclavo, romperían la "sincronización" o provocarían la locura. El uso previsto de la herramienta es crear espejos de solo lectura fuera del sitio, pero hace un trabajo admirable al crear un servidor de respaldo.
Tom Mayfield

1
El beneficio de svnsync es que puede ejecutar esto muy a menudo. Cada diez minutos o incluso en cada confirmación (usando un gancho). El beneficio de esto es que uno puede reducir la pérdida potencial de datos que de otro modo obtendría entre la última copia de seguridad y cuando se pierde el repositorio en vivo.
8DH

12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Este subcomando realiza una copia de seguridad completa "en caliente" de su repositorio, incluidos todos los enlaces, archivos de configuración y, por supuesto, archivos de base de datos.




5

Básicamente, es seguro copiar la carpeta del repositorio si se detiene el servidor svn. (fuente: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Entonces, si tiene permiso para detener el servidor, hágalo y simplemente copie el repositorio, ya sea con algún script o una herramienta de respaldo. Cobian Backup encaja muy bien aquí, ya que puede detener e iniciar servicios automáticamente, y puede hacer copias de seguridad incrementales, por lo que solo está haciendo una copia de seguridad de partes del repositorio que han cambiado recientemente (útil si el repositorio es grande y está haciendo una copia de seguridad en una ubicación remota )

Ejemplo:

  1. Instalar Cobian Backup
  2. Agregar una tarea de respaldo:

    • Establecer la fuente en la carpeta del repositorio (por ejemplo C:\Repositories\),

    • Agregar evento de pre-respaldo "STOP_SERVICE"VisualSVN,

    • Agregar evento posterior a la copia de seguridad, "START_SERVICE"VisualSVN,

    • Establezca otras opciones según sea necesario. Hemos configurado copias de seguridad incrementales, incluida la eliminación de las antiguas, la programación de copias de seguridad, el destino, la compresión, incl. división de archivos, etc.

  3. ¡Lucro!


4

Hay 2 métodos principales para hacer una copia de seguridad de un servidor svn, primero es una copia en caliente que creará una copia de sus archivos de repositorio, el principal problema con este enfoque es que guarda datos sobre el sistema de archivos subyacente, por lo que puede tener algunas dificultades para intentar restaurar este tipo de copia de seguridad en otro servidor svn o en otra máquina. Hay otro tipo de copia de seguridad llamada volcado, esta copia de seguridad no guardará ninguna información del sistema de archivos subyacente y es potable en cualquier tipo de servidor SVN basado en la subversión de tigiris.org.

sobre la herramienta de copia de seguridad, puede usar la herramienta svnadmin (puede hacer copias en caliente y volcar) desde el símbolo del sistema, esta consola reside en el mismo directorio donde vive su servidor svn o puede buscar en Google las herramientas de copia de seguridad svn.

mi recomendación es que haga ambos tipos de copias de seguridad y las saque de la oficina a su cuenta de correo electrónico, servicio amazon s3, ftp o servicios azules, de esa manera tendrá una copia de seguridad segura sin tener que alojar el servidor svn en algún lugar tu oficina.


4

Aquí una herramienta GUI de Windows para hacer un volcado de repositorios de subversión locales y remotos:

https://falsinsoft-software.blogspot.com/p/svn-backup-tool.html

La descripción de la herramienta dice:

Esta sencilla herramienta permite realizar una copia de seguridad de un repositorio de subversión local y remoto. El software funciona de la misma manera que el "svnadmin" pero no es una interfaz gráfica de usuario sobre él. En su lugar, use directamente las bibliotecas de subversión para permitir crear volcado en modo independiente sin ninguna otra herramienta adicional.

Espero que esto ayude...


Gracias por compartir esto, hace exactamente lo indicado.
Ed DeGagne

3

Me gusta simplemente copiar todo el directorio repositorio a mi ubicación de copia de seguridad. De esa manera, si sucede algo, puede copiar el directorio y estar listo para comenzar de inmediato.

Solo asegúrese de preservar los permisos, si es necesario. Por lo general, esto es solo una preocupación en las máquinas Linux.


77
esto no es exactamente seguro si alguien realiza una confirmación durante una operación de copia; me ha sucedido esto incluso con solo 4 personas que tienen acceso al repositorio y lo usan con poca frecuencia. Vea la respuesta de Duncan sobre el uso de hotcopy.
nickf

Sin embargo, si está trabajando completamente solo, ¿supongo que esta es una forma segura de hacer una copia de seguridad de un repositorio? Utilizo Subversion para mis proyectos personales, y esto es lo que estoy haciendo actualmente.
Andrew Garrison

3

Para los repositorios alojados puede usar desde svn versión 1.7 svnrdump, que es análogo a svnadmin dumplos repositorios locales. Este artículo proporciona un buen recorrido, que esencialmente se reduce a:

svnrdump dump /URL/to/remote/repository > myRepository.dump

Después de descargar el archivo de volcado, puede importarlo localmente

svnadmin load /path/to/local/repository < myRepository.dump

o cárguelo al host de su elección.


3

Si está utilizando el formato del repositorio FSFS (predeterminado), puede copiar el repositorio para hacer una copia de seguridad. Con el antiguo sistema BerkleyDB, el repositorio no es independiente de la plataforma y, por lo general, querrá usar el volcado de svnadmin.

El tema de la documentación de svnbook para la copia de seguridad recomienda el svnadmin hotcopycomando, ya que se ocupará de problemas como los archivos en uso y demás.


2
@echo off
set hour=%time:~0,2%
if "%hour:~0,1%"==" " set hour=0%time:~1,1%
set folder=%date:~6,4%%date:~3,2%%date:~0,2%%hour%%time:~3,2%

echo Performing Backup
md "\\HOME\Development\Backups\SubVersion\%folder%"

svnadmin dump "C:\Users\Yakyb\Desktop\MainRepositary\Jake" | "C:\Program Files\7-Zip\7z.exe" a "\\HOME\Development\Backups\SubVersion\%folder%\Jake.7z" -sibackupname.svn

Este es el archivo por lotes que tengo en ejecución que realiza mis copias de seguridad



1

He compilado los pasos que seguí con el propósito de hacer una copia de seguridad del repositorio SVN remoto de mi proyecto.

install svk (http://svk.bestpractical.com/view/SVKWin32)

install svn (http://sourceforge.net/projects/win32svn/files/1.6.16/Setup-Subversion-1.6.16.msi/download)

svk mirror //local <remote repository URL>

svk sync //local

Esto lleva tiempo y dice que está recuperando los registros del repositorio. Crea un conjunto de archivos dentroC:\Documents and Settings\nverma\.svk\local .

Para actualizar este repositorio local con el último conjunto de cambios desde el remoto, simplemente ejecute el comando anterior de vez en cuando.

Ahora puedes jugar con tu repositorio local (/home/user/.svk/local en este ejemplo) como si fuera un repositorio SVN normal!

El único problema con este enfoque es que el depósito local se crea con incrementos de revisión por la revisión real en el depósito remoto. Como alguien escribió:

El comando svk miror genera una confirmación en el repositorio recién creado. Por lo tanto, todas las confirmaciones creadas por la sincronización posterior tendrán números de revisión incrementados en uno en comparación con el repositorio público remoto.

Pero, esto estaba bien para mí, ya que solo quería alguna copia de seguridad del repositorio remoto de vez en cuando, nada más.

Verificación:

Para verificar, use el cliente SVN con el repositorio local como este:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

Este comando luego va a verificar la última revisión del repositorio local. Al final lo dice Checked out revision N. Esta Nfue una más que la revisión real encontrada en el repositorio remoto (debido al problema mencionado anteriormente).

Para verificar que svk también trajo todo el historial, la comprobación de SVN se ejecutó con varias revisiones anteriores utilizando -r2, 10, 50, etc. Luego, los archivos en<local-dir-path-to-checkout-onto> se confirmó que eran de esa revisión.

Al final, comprima el directorio C:/Documents and Settings\nverma/.svk/local/y almacene el zip en algún lugar. Sigue haciendo esto regularmente.


0

como otros han dicho, hot-backup.py del equipo de Subversion tiene algunas características agradables sobre simplemente svnadmin hotcopy

Ejecuté una tarea programada en una secuencia de comandos de Python que araña todos mis repositorios en la máquina, y utilizo la copia de seguridad para mantener varios días de copias (paranoicas de corrupción) y una svnadmin svndumpen una máquina remota. La restauración es realmente fácil a partir de eso, hasta ahora.


0

1.1 Crear volcado desde el repositorio SVN (Subversion)

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

Ejemplo real

svnadmin dump /var/www/svn/testrepo > /backups/testrepo.dump

1.2 Gzip creó volcado

gzip -9 /path/to/reponame.dump

Ejemplo real

gzip -9 /backups/testrepo.dump

1.3 Descarga SVN y Descarga Gzip con One-liner

svnadmin dump /path/to/reponame | gzip -9 > /path/to/reponame.dump.gz

Ejemplo real

svnadmin dump /var/www/svn/testrepo |Â gzip -9 > /backups/testrepo.dump.gz

Cómo hacer una copia de seguridad (volcado) y restaurar (cargar) el repositorio SVN (Subversion) en Linux.
Ref: svn subversion backup andrestore

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.