Strategie di backup del repository SVN

Sono nuovo di SVN e mi piacerebbe sapere quali metodi sono disponibili per il backup dei repository in un ambiente Windows?

Potresti usare qualcosa come (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz 

Poiché Windows non supporta GZip, è solo:

 svnadmin dump repositorypath > backupname.svn 

Utilizziamo l’hotcopy di svnadmin, ad esempio:

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

Come per il libro :

È ansible eseguire questo comando in qualsiasi momento e creare una copia sicura del repository, indipendentemente dal fatto che altri processi stiano utilizzando il repository.

Ovviamente puoi ZIP (preferibilmente 7-Zip) la copia di backup. IMHO È la più semplice delle opzioni di backup: in caso di emergenza, c’è poco da fare che decomprimere nuovamente in posizione.

Sul sito Web di Subversion è disponibile uno script hotbackup.py molto utile per automatizzare i backup.

http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in

Ecco uno script Perl che:

  1. Backup del repository
  2. Copialo su un altro server tramite SCP
  3. Recupera il backup
  4. Creare un repository di test dal backup
  5. Fai un checkout di prova
  6. Inviaci eventuali errori (tramite cron)

Il copione:

 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 fonte e ulteriori dettagli sul razionale per questo tipo di backup.

Io uso svnsync , che configura un server remoto come mirror / slave. Abbiamo avuto un server in calo due settimane fa, e sono stato in grado di passare lo slave in posizione primaria abbastanza facilmente (ho dovuto solo resettare l’UUID del repository slave sull’originale).

Un altro vantaggio è che la sincronizzazione può essere eseguita da un intermediario, piuttosto che come un’attività su entrambi i server. Ho avuto un client per due VPN sincronizzare un repository tra di loro.

svnadmin hotcopy

 svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH 

Questo sottocomando esegue un backup completo “hot” del repository, inclusi tutti gli hook, i file di configurazione e, naturalmente, i file di database.

svnbackup su Google Code, un’applicazione console .NET.

  • È ansible creare un backup del repository ( dump ) con svnadmin dump .

  • Puoi quindi importarlo usando il svnadmin load .

Riferimento dettagliato in SVNBook: “Migrazione dei dati del repository utilizzando svnadmin”

Fondamentalmente è sicuro copiare la cartella del repository se il server svn è fermo. (fonte: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Quindi, se ti è permesso fermare il server, fallo e copia il repository, con qualche script o uno strumento di backup. Cobian Backup si adatta bene in quanto può arrestare e avviare i servizi automaticamente e può eseguire backup incrementali in modo da eseguire solo il backup di parti del repository recentemente modificate (utile se il repository è di grandi dimensioni e si sta eseguendo il backup in una posizione remota ).

Esempio:

  1. Installa Cobian Backup
  2. Aggiungi un’attività di backup:

    • Imposta la sorgente nella cartella del repository (ad es. C:\Repositories\ ),

    • Aggiungi evento pre-backup "STOP_SERVICE" VisualSVN,

    • Aggiungi evento post-backup, "START_SERVICE" VisualSVN,

    • Imposta altre opzioni secondo necessità. Abbiamo impostato backup incrementali inclusa la rimozione di quelli vecchi, programma di backup, destinazione, compressione incl. divisione dell’archivio, ecc.

  3. Profitto!

ci sono 2 metodi principali per il backup di un server svn, in primo luogo è hotcopy che creerà una copia dei file del repository, il problema principale con questo approccio è che salva i dati sul file system sottostante, quindi potresti avere qualche difficoltà nel provare a ripostore questo tipo di backup in un altro tipo di server svn o un’altra macchina. c’è un altro tipo di backup chiamato dump, questo backup non salverà alcuna informazione del file system sottostante ed è potabile a qualsiasi tipo di server SVN basato su subversione tigiris.org.

sullo strumento di backup è ansible utilizzare lo strumento svnadmin (è in grado di eseguire hotcopy e dump) dal prompt dei comandi, questa console risiede nella stessa directory in cui risiede il server svn oppure è ansible eseguire google per gli strumenti di backup svn.

La mia raccomandazione è che facciate entrambi i tipi di backup e li portiate fuori dall’ufficio per i vostri servizi di posta elettronica, amazon s3 service, ftp o azure, in questo modo avrete un backup sicuro senza dover ospitare il server svn da qualche parte fuori il tuo ufficio.

Qui uno strumento GUI per Windows per fare un dump di repository di subversion locali e remoti:

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

La descrizione dello strumento dice:

Questo semplice strumento consente di eseguire un backup di dump di un repository di subversion locale e remoto. Il software funziona allo stesso modo di “svnadmin”, ma non è un front end GUI su di esso. Utilizzare invece direttamente le librerie di subversion per consentire di creare il dump in modalità standalone senza altri strumenti aggiuntivi.

Spero che questo aiuto …

Mi piace solo copiare l’intera directory repo nella mia posizione di backup. In questo modo, se succede qualcosa, puoi semplicemente copiare la directory indietro ed essere pronto ad andare immediatamente.

Assicurati di conservare le autorizzazioni, se necessario. Di solito, questo è solo un problema per le macchine Linux.

Per i repository ospitati, dal momento che svn versione 1.7 usa svnrdump , che è analogo a svnadmin dump per i repository locali. Questo articolo fornisce un bel passaggio, che sostanzialmente si riduce a:

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

Dopo aver scaricato il file di dump, puoi importarlo localmente

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

o caricarlo sull'host di tua scelta.

Se si utilizza il formato del repository FSFS (predefinito), è ansible copiare il repository stesso per eseguire un backup. Con il vecchio sistema BerkleyDB, il repository non è indipendente dalla piattaforma e in genere si vorrebbe usare il dump svnadmin.

L’ argomento della documentazione di svnbook per il backup raccomanda il comando svnadmin hotcopy , poiché si prenderà cura di problemi come i file in uso e così via.

 @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 

Questo è il file batch che ho in esecuzione che esegue i miei backup

Per la soluzione di backup giornaliera e completa, utilizzare qui gli script di backup SVN .

Ho compilato i passaggi che ho seguito allo scopo di eseguire un backup del repository SVN remoto del mio progetto.

 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  svk sync //local 

Questo richiede tempo e dice che sta recuperando i log dal repository. Crea un insieme di file all’interno di C:\Documents and Settings\nverma\.svk\local .

Per aggiornare questo repository locale con l’ultima serie di modifiche da quella remota, eseguire di tanto in tanto il comando precedente.

Ora puoi giocare con il tuo repository locale ( /home/user/.svk/local in questo esempio) come se fosse un normale repository SVN!

L’unico problema con questo approccio è che il repository locale viene creato con incrementi di revisione dalla revisione effettiva nel repository remoto. Come qualcuno ha scritto:

Il comando svk miror genera un commit nel repository appena creato. Quindi tutti i commit creati dalla sincronizzazione successiva avranno numeri di revisione incrementati di uno rispetto al repository pubblico remoto.

Ma per me andava bene, perché volevo solo qualche backup del repository remoto volta per volta, nient’altro.

Verifica:

Per verificare, utilizzare il client SVN con il repository locale in questo modo:

 svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  

Questo comando quindi va a controllare l’ultima revisione dal repository locale. Alla fine dice Checked out revision N Questo N era uno più della revisione effettiva trovata nel repository remoto (a causa del problema menzionato sopra).

Per verificare che lo svk abbia anche portato tutta la cronologia, il checkout SVN è stato eseguito con varie versioni precedenti usando -r con 2, 10, 50 ecc. Quindi i file in sono stati confermati in essere da quella revisione.

Alla fine, zip la directory C:/Documents and Settings\nverma/.svk/local/ e memorizza il file zip da qualche parte. Continua a farlo regolarmente.

come altri hanno già detto, hot-backup.py dal team di Subversion ha delle belle funzionalità rispetto al semplice svnadmin hotcopy

Eseguo un’attività programmata su uno script python che spider per tutti i miei repository sulla macchina, e usa hotbackup per conservare diversi giorni di hotcopies (paranoico di corruzione) e svnadmin svndump su una macchina remota. Il ripristino è davvero facile da quello – finora.

1.1 Crea Dump dal repository SVN (Subversion)

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

Esempio reale

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

1.2 Scarico creato da Gzip

 gzip -9 /path/to/reponame.dump 

Esempio reale

 gzip -9 /backups/testrepo.dump 

1.3 SVN Dump e Gzip Dump con One-liner

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

Esempio reale

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

Come eseguire il backup (dump) e ripristinare (caricare) il repository SVN (Subversion) su Linux.
Ref: svn subversion backup andrestore