windows - protocol - Estrategias de copia de seguridad del repositorio SVN
tortoise svn create repository on server (19)
Soy nuevo en SVN y me gustaría saber qué métodos están disponibles para hacer copias de seguridad de los repositorios en un entorno Windows.
Aquí hay un script de Perl que:
- Copia de seguridad del repositorio
- Cópialo a otro servidor vía SCP.
- Recuperar la copia de seguridad
- Crear un repositorio de prueba desde la copia de seguridad
- Hacer una comprobación de prueba
- Email 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 de script y más detalles sobre la racionalidad para este tipo de copia de seguridad.
Aquí una herramienta de Windows GUI 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 volcado 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, utilice directamente las bibliotecas de subversión para permitir crear un volcado en modo independiente sin ninguna otra herramienta adicional.
Espero que esto ayude...
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 se le permite detener el servidor, hágalo y simplemente copie el repositorio, ya sea con algún script o una herramienta de copia de seguridad. Cobian Backup se adapta muy bien aquí ya que puede detener e iniciar los servicios automáticamente, y puede hacer copias de seguridad incrementales, por lo que solo está realizando copias de seguridad de partes del repositorio que han cambiado recientemente (útil si el repositorio es grande y está realizando copias de seguridad en una ubicación remota) ).
Ejemplo:
- Instalar Cobian Backup
Añadir una tarea de copia de seguridad:
Establezca la fuente en la carpeta del repositorio (por ejemplo,
C:/Repositories/
),Agregue el evento de copia de seguridad
"STOP_SERVICE"
VisualSVN,Agregue un evento posterior a la copia de seguridad,
"START_SERVICE"
VisualSVN,Establecer otras opciones según sea necesario. Hemos configurado copias de seguridad incrementales, incluida la eliminación de las antiguas, el programa de copias de seguridad, el destino, la compresión, incl. archivo dividido etc.
¡Lucro!
Hay un script hotbackup.py disponible en el sitio web de Subversion que es muy útil para automatizar las copias de seguridad.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
He recopilado los pasos que seguí con el propósito 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á recuperando 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 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 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, use el cliente SVN con el repositorio local de esta manera:
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 dice Checked out revision N
Este N
fue uno 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 verificació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>
ser de esa revisión.
Al final, comprima el directorio C:/Documents and Settings/nverma/.svk/local/
y guarde el C:/Documents and Settings/nverma/.svk/local/
zip en algún lugar. Sigue haciendo esto regularmente.
Me gusta copiar el directorio de repositorio completo a mi ubicación de copia de seguridad. De esa manera, si ocurre algo, puede volver a copiar el directorio y estar listo para comenzar de inmediato.
Solo asegúrese de conservar los permisos, si es necesario. Por lo general, esto es sólo una preocupación en las máquinas Linux.
Para la solución de copia de seguridad completa y diaria, use los scripts de copia de seguridad SVN aquí .
Para los repositorios alojados puede, ya que svn versión 1.7, puede usar svnrdump
, que es análogo al svnadmin dump
para los repositorios locales. Este article proporciona un recorrido agradable, que básicamente se reduce a:
svnrdump dump /URL/to/remote/repository > myRepository.dump
Una vez que haya descargado el archivo de volcado, puede importarlo localmente
svnadmin load /path/to/local/repository < myRepository.dump
o subirlo al anfitrión de su elección.
Podrías usar algo como (Linux):
svnadmin dump repositorypath | gzip > backupname.svn.gz
Ya que Windows no soporta GZip es solo:
svnadmin dump repositorypath > backupname.svn
Si está utilizando el formato de repositorio de FSFS (el predeterminado), puede copiar el repositorio en sí para hacer una copia de seguridad. Con el sistema BerkleyDB más antiguo, el repositorio no es independiente de la plataforma y, por lo general, desearía usar svnadmin dump.
El tema de documentación de svnbook para copia de seguridad recomienda el comando svnadmin hotcopy
, ya que se ocupará de problemas como los archivos en uso y svnadmin hotcopy
.
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 aparte de volver a descomprimirlo en su posición.
Yo uso svnsync , que configura un servidor remoto como un espejo / esclavo. Tuvimos un servidor que se cayó hace dos semanas, y pude cambiar el esclavo a la posición principal 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 cualquier servidor. He tenido un cliente para dos VPNs sincronizar un repositorio entre ellos.
como han dicho otros, hot-backup.py del equipo de Subversion tiene algunas características svnadmin hotcopy
sobre la svnadmin hotcopy
Ejecuto una tarea programada en un script de Python que utiliza arañas para todos mis repositorios en la máquina, y utilizo hotbackup para guardar varios días de hotcopias (paranoico de la corrupción) y svnadmin svndump
en una máquina remota. La restauración es muy fácil a partir de eso, hasta ahora.
hay 2 métodos principales para hacer una copia de seguridad de un servidor svn, primero es la 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 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 guarda ninguna información del sistema de archivos subyacente y es accesible a cualquier tipo de servidor SVN basado en la subversión tigiris.org.
acerca de la herramienta de copia de seguridad puede usar la herramienta svnadmin (es capaz de realizar 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 herramientas de copia de seguridad en 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 azure, de esa manera tendrá una copia de seguridad segura sin tener que alojar el servidor svn en algún lugar fuera de tu oficina.
svnbackup sobre Google Code, una aplicación de consola .NET.
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH
Este subcomando hace una copia de seguridad "caliente" completa de su repositorio, incluidos todos los enlaces, archivos de configuración y, por supuesto, archivos de base de datos.
1.1 Crear un 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 creado volcado
gzip -9 /path/to/reponame.dump
Ejemplo real
gzip -9 /backups/testrepo.dump
1.3 SVN Dump y Gzip Dump 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 y restore
@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
Puede crear una copia de seguridad del repositorio ( volcado ) con
svnadmin dump
.A continuación, puede importarlo utilizando
svnadmin load
.
Referencia detallada en el SVNBook: "Migración de datos del repositorio usando svnadmin"