Strategie di backup del repository SVN


195

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


1
VisualSVN Server per Windows include una funzionalità integrata per il backup e la verifica dei repository SVN nei tempi previsti: visualsvn.com/server/features/backup
bahrep

Risposte:


179

Potresti usare qualcosa come (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Poiché Windows non supporta GZip è solo:

svnadmin dump repositorypath > backupname.svn

11
non lo so per certo, ma sicuramente alcuni strumenti come 7-zip sarebbero in grado di comprimere i dati da STDIN, il che significa che potresti usare il primo stile anche su Windows.
Nickf,

5
Sto solo guardando questo me stesso e un commento dal documento svnbook.red-bean.com/nightly/en/… è che otterrai un output molto grande di dump svnadmin, a meno che tu non usi l'opzione --deltas.
Jason S,

5
E Windows supporta gzip, basta ottenerlo dalla pagina Web di unxutils unxutils.sourceforge.net
Jason S,

52
Usando 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn questo creerà un file chiamato 'backup.7z' che contiene un singolo file, 'backupname.svn', che è l'output di svnadmin dump.
Matt,

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

107

Usiamo svnadmin hotcopy, ad esempio:

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

Secondo il libro :

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

Naturalmente puoi ZIP (preferibilmente 7-Zip) la copia di backup. IMHO È la più semplice delle opzioni di backup: in caso di disastro non c'è altro da fare che decomprimerlo in posizione.


13
Penso che svnadmin dump sia preferito per i backup per un paio di motivi. Vedi svn.haxx.se/users/archive-2005-05/0842.shtml
daremon il

4
@daremon: ti suggerisco di leggere le risposte ai post a cui ti sei collegato, in particolare quello che menziona il dump svnadmin non include i file di controllo del repository.
Powerlord,

gara chiusa, ma sto votando per la discarica svnadmin dopo aver letto le risposte suggerite da R. Bemrose
mobibob,

Il comando hotcopy non sovrascrive o incrementa i backup che genera. Quindi, se hai intenzione di automatizzarlo in Windows usando l' utilità di
Ryan Sampson,

1
Un avvertimento. Non copiare a caldo una copia mirror svnsync di un repository mentre svnsync è in esecuzione! La copia risultante potrebbe essere danneggiata. Vedi questa discussione per i dettagli: subversion.open.collab.net/ds/…
zvolkov


22

Ecco uno script Perl che:

  1. Eseguire il backup del repository
  2. Copiarlo su un altro server tramite SCP
  3. Recupera il backup
  4. Creare un repository di prova dal backup
  5. Fai un checkout di prova
  6. Email con 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`;

Fonte dello script e maggiori dettagli sul razionale per questo tipo di backup.


19

Uso svnsync , che configura un server remoto come mirror / slave. Abbiamo avuto un server inattivo due settimane fa e sono stato in grado di passare lo slave in posizione primaria abbastanza facilmente (ho dovuto solo ripristinare l'UUID sul repository slave sull'originale).

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


quindi sincronizza le ultime versioni di repository tra i due ovviamente?
Positivo

1
Anche se è nel titolo, non so che lo definirei una "sincronizzazione". È davvero un backup, dove prenderà le revisioni sul master e le metterà sullo slave. Se si apportano modifiche allo slave, interrompono la "sincronizzazione" o si traducono in follia. L'uso previsto dello strumento è la creazione di mirror off-site di sola lettura, ma fa un lavoro ammirevole nella creazione di un server di backup.
Tom Mayfield,

1
Il vantaggio di svnsync è che puoi eseguirlo molto spesso. Ogni dieci minuti o anche ad ogni commit (usando un hook). Il vantaggio è che si può ridurre la potenziale perdita di dati che altrimenti si otterrebbe tra l'ultimo backup e la perdita del repository live.
8DH,

12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Questo sottocomando esegue un backup "caldo" completo del repository, inclusi tutti gli hook, i file di configurazione e, ovviamente, i file di database.




5

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

Quindi, se ti è permesso di fermare il server, fallo e copia semplicemente il repository, con qualche script o uno strumento di backup. Cobian Backup si adatta bene qui in quanto può arrestare e avviare i servizi automaticamente e può eseguire backup incrementali in modo da eseguire il backup solo di parti del repository che sono state modificate di recente (utile se il repository è grande e si esegue il backup in posizione remota ).

Esempio:

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

    • Imposta l'origine sulla cartella del repository (ad es. C:\Repositories\),

    • Aggiungi l'evento di pre-backup "STOP_SERVICE"VisualSVN,

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

    • Impostare altre opzioni secondo necessità. Abbiamo impostato backup incrementali tra cui rimozione di quelli vecchi, pianificazione dei backup, destinazione, compressione incl. suddivisione dell'archivio ecc.

  3. Profitto!


4

ci sono 2 metodi principali per il backup di un server svn, il primo è 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à a provare a ripostare questo tipo di backup in un altro tipo di server svn o in un'altra macchina. esiste un altro tipo di backup chiamato dump, questo backup non salverà alcuna informazione sul file system sottostante e il suo potabile su qualsiasi tipo di server SVN basato su sovversione tigiris.org.

sullo strumento di backup puoi usare lo strumento svnadmin (è in grado di eseguire hotcopy e dump) dal prompt dei comandi, questa console risiede nella stessa directory in cui risiede il tuo server svn oppure puoi cercare su Google strumenti di backup svn.

la mia raccomandazione è di fare entrambi i tipi di backup e di portarli fuori dall'ufficio per il tuo account di posta elettronica, servizio Amazon s3, ftp o servizi azzurro, in questo modo avrai un backup sicuro senza dover ospitare il server svn da qualche parte fuori il tuo ufficio.


4

Ecco uno strumento GUI di Windows per creare un dump di repository di sovversione 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 sovversione locale e remoto. Il software funziona allo stesso modo di "svnadmin" ma non è un frontend GUI su di esso. Utilizzare invece direttamente le librerie di sovversione per consentire la creazione di dump in modalità autonoma senza altri strumenti aggiuntivi.

Spero che questo aiuto ...


Grazie per averlo condiviso, fa esattamente come indicato.
Ed DeGagne,

3

Mi piace solo copiare l'intera directory di repository nella mia posizione di backup. In questo modo, se succede qualcosa, puoi semplicemente copiare indietro la directory ed essere pronto per partire immediatamente.

Assicurati di conservare le autorizzazioni, se necessario. Di solito, questa è solo una preoccupazione per le macchine Linux.


7
questo non è esattamente sicuro se qualcuno commette un commit durante un'operazione di copia - ho avuto questo accadere a me anche con solo 4 persone che hanno accesso al repository e lo usano raramente. Vedi la risposta di Duncan sull'uso della hotcopy.
Nickf,

Tuttavia, se lavori completamente da solo, suppongo che questo sia un modo sicuro per eseguire il backup di un repository? Uso sovversione per i miei progetti personali, e questo è quello che sto facendo attualmente.
Andrew Garrison,

3

Per i repository ospitati è possibile utilizzare svn versione 1.7 svnrdump, che è analogo ai svnadmin dumprepository locali. Questo articolo fornisce una bella guida, che si riduce essenzialmente a:

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

Dopo aver scaricato il file di dump è possibile importarlo localmente

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

o caricalo sull'host di tua scelta.


3

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

L' argomento della documentazione di svnbook per il backup raccomanda il svnadmin hotcopycomando, poiché si occuperà di problemi come file in uso e simili.


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

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



1

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 <remote repository URL>

svk sync //local

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

Per aggiornare questo repository locale con l'ultima serie di modifiche da quella remota, è sufficiente eseguire il comando precedente di volta in volta.

Ora puoi giocare con il tuo repository locale ( /home/user/.svk/localin 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 dall'attuale revisione nel repository remoto. Come qualcuno ha scritto:

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

Ma per me è andato tutto bene, dato che volevo solo qualche volta il backup del repository remoto, 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/"  <local-dir-path-to-checkout-onto>

Questo comando va quindi a verificare l'ultima revisione dal repository locale. Alla fine dice Checked out revision N. Questo Nera uno in più rispetto alla revisione effettiva trovata nel repository remoto (a causa del problema menzionato sopra).

Per verificare che svk abbia portato anche tutta la cronologia, il checkout SVN è stato eseguito con varie revisioni precedenti utilizzando -r2, 10, 50 ecc. Quindi i file in <local-dir-path-to-checkout-onto>sono stati confermati come derivati ​​da quella revisione.

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


0

come altri hanno già detto, hot-backup.py del team di Subversion ha alcune caratteristiche interessanti oltre alla semplice svnadmin hotcopy

Eseguo un'attività pianificata su uno script Python che esegue il spider per tutti i miei repository sulla macchina e utilizza l'hotbackup per conservare diversi giorni di hotcopie (paranoici di corruzione) e svnadmin svndumpsu una macchina remota. Il restauro è davvero facile da quello - finora.


0

1.1 Creare Dump dal repository SVN (Subversion)

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

Vero esempio

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

1.2 Dump creato da Gzip

gzip -9 /path/to/reponame.dump

Vero esempio

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

Vero esempio

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

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.