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.
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.
Respuestas:
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
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
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
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.
Hay un script hotbackup.py disponible en el sitio web de Subversion que es bastante útil para automatizar las copias de seguridad.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Aquí hay un script de Perl que:
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.
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.
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.
Puede crear una copia de seguridad del repositorio ( volcado ) con svnadmin dump
.
Luego puede importarlo usando svnadmin load
.
Referencia detallada en el SVNBook: "Migración de datos del repositorio usando svnadmin"
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:
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.
¡Lucro!
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.
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...
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.
Para los repositorios alojados puede usar desde svn versión 1.7 svnrdump
, que es análogo a svnadmin dump
los 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.
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 hotcopy
comando, ya que se ocupará de problemas como los archivos en uso y demás.
@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
Para la solución de copia de seguridad diaria y completa, solo use los scripts de copia de seguridad SVN aquí .
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 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 utilizando -r
2, 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.
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 svndump
en una máquina remota. La restauración es realmente fácil a partir de eso, hasta ahora.
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