2008-08-28 30 views
190

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.Estrategias de copia de seguridad del repositorio SVN

+1

VisualSVN Server para Windows incluye una repositorios SVN característica integrada de copia de seguridad y verificar según la programación: https://www.visualsvn.com/server/features/backup/ – bahrep

Respuesta

175

Usted podría utilizar algo así como (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz 

Puesto que Windows no es compatible con gzip es simplemente:

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ías usar el primer estilo en Windows. – nickf

+5

Solo estoy viendo esto yo mismo y un comentario de los documentos http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.backup es que tú " Obtendré una salida muy grande del volcado svnadmin, a menos que use la opción --deltas. –

+5

Y Windows admite gzip, solo obténgalo de la página web de unxutils http://unxutils.sourceforge.net/ –

3

Me gusta copiar todo el directorio repo a la ubicación de mi copia de seguridad. De esta forma, si sucede algo, puede copiar el directorio y estar listo para funcionar inmediatamente.

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

+7

esto no es exactamente seguro si alguien hace una confirmación durante una operación de copia - Me ha sucedido esto incluso con solo 4 personas teniendo acceso al repositorio y usándolo con poca frecuencia. Vea la respuesta de Duncan sobre el uso de la copia en caliente. – nickf

+0

Sin embargo, si trabajas completamente solo, entonces supongo que es una forma segura de realizar una copia de seguridad de un repositorio. Uso la subversión para mis proyectos personales, y esto es lo que estoy haciendo actualmente. –

11

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH 

Este subcomando realiza una copia de seguridad completa “en caliente” de su repositorio, incluyendo todos los ganchos, archivos de configuración, y , por supuesto, archivos de base de datos.

3

Si está utilizando el formato de repositorio FSFS (por defecto), entonces se puede copiar el propio repositorio para hacer una copia de seguridad. Con el viejo sistema BerkleyDB, el repositorio no es independiente de la plataforma y, en general, querrá usar el volcado svnadmin.

El svnbook documentation topic for backup recomienda el comando svnadmin hotcopy, ya que se ocupará de problemas como los archivos en uso y otros.

106

Utilizamos hotcopy svnadmin, por ejemplo:

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

Según the book:

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

Puede, por supuesto, ZIP (preferentemente 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 aparte de descomprimirlo en su lugar.

+13

Creo que svnadmin dump es preferido para copias de seguridad por un par de razones. Consulte http://svn.haxx.se/users/archive-2005-05/0842.shtml – daremon

+4

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

+0

cerrar carrera, pero, estoy votando por svnadmin dump después de leer las respuestas sugeridas por R. Bemrose – mobibob

19

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

Otra ventaja 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 sincronizar un repositorio entre ellos.

+0

por lo que sincroniza las últimas versiones de repo entre los dos obviamente? – PositiveGuy

+1

Aunque está en el título, no sé si lo llamaría una "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 resultarían en locura. El uso previsto de la herramienta es crear réplicas de solo lectura fuera del sitio, pero hace un trabajo admirable al crear un servidor de respaldo. –

+0

El enlace actualizado es http://svnbook.red-bean.com/en/1.4/svn.ref.svnsync.html – darrickc

0

como han dicho otros, hot-backup.py del equipo de Subversion tiene algunas características interesantes más simplemente svnadmin hotcopy

corro una tarea programada en un script en Python que las arañas para todos mis repositorios en la máquina, y usa Hotbackup para guardar varios días de las copias en caliente (paranoico de corrupción) y un svnadmin svndump en una máquina remota. La restauración es realmente fácil de eso, hasta ahora.

22

Aquí es un script en Perl que:

  1. copia de seguridad del repositorio
  2. copiarlo 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. Haga una comprobación de comprobación
  6. Correo electrónico con cualquier error (a través de cron)

El guión:

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`; 

Script source and more details about the rational for this type of backup.

+6

+1 para incluir un paso sobre * probar * la copia de seguridad. –

10

svnbackup en Google Code, una aplicación de consola .NET.

+2

Buen descubrimiento. Gracias por señalar esto. –

4

hay 2 métodos principales para hacer una copia de seguridad de un servidor svn, primero es la copia 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 dificultades para volver a almacenar este tipo de copia de seguridad en otro tipo de servidor svn u 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 para cualquier tipo de servidor SVN basado en la subversión tigiris.org.

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

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, amazon s3 service, ftp o servicios azure, de esa manera tendrá una copia de seguridad de seguridad sin tener que alojar el svn servidor en algún lugar fuera de su oficina.

1

He compilado los pasos que seguí con el fin de realizar 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á obteniendo los registros del repositorio. Crea un conjunto de archivos dentro de C:\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 puede jugar con su 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 repositorio local se crea con incrementos de revisión por la revisión real en el repositorio 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 una copia de seguridad del repositorio remoto de vez en cuando, nada más.

Verificación:

Para verificar, utilice el cliente SVN con el repositorio local de la siguiente manera:

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

Este comando a continuación, va a la caja de la última revisión del repositorio local. Al final dice Checked out revision N. Esta N fue 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 usando -r con 2, 10, 50 etc. Luego se confirmó que los archivos en <local-dir-path-to-checkout-onto> eran de esa revisión.

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

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 copias de seguridad de mis

5

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

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 se adapta muy bien ya que puede detener e iniciar servicios de forma automática, y puede realizar copias de seguridad incrementales, por lo que solo realiza copias de seguridad de partes del repositorio que han cambiado recientemente (útil si el repositorio es grande y realiza copias de seguridad en ubicaciones remotas))

Ejemplo:

  1. Instalar Cobian Backup
  2. Añadir una tarea de copia de seguridad:

    • origen es la de carpeta de depósito (por ejemplo,C:\Repositories\),

    • Añadir evento previo a la copia de seguridad "STOP_SERVICE" VisualSVN,

    • Añadir evento posterior a la copia de seguridad, "START_SERVICE" VisualSVN,

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

  3. beneficio!

3

Para repositorios alojados puedas desde la versión 1.7 SVN uso svnrdump, que es análoga a svnadmin dump para repositorios locales. Este article proporciona un agradable paseo a través, que esencialmente se reduce a:

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

Después de haber descargado el archivo de volcado se puede importar localmente

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

o subirlo a la gran cantidad de su elección .

4

Aquí una herramienta de interfaz gráfica de usuario 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:

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

Esperanza esta ayuda ...

+0

Gracias por compartir esto, hace exactamente como se indica. –

0

1,1 Crear volcado del 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 Creado volcado

gzip -9 /path/to/reponame.dump 

Ejemplo real

gzip -9 /backups/testrepo.dump 

1.3 SVN volquete y gzip volquete con una sola línea

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 copia de seguridad (volcado) y restauración del repositorio (carga) SVN (Subversion) en Linux.
Ref:svn subversion backup andrestore

Cuestiones relacionadas