Sono nuovo di SVN e mi piacerebbe sapere quali metodi sono disponibili per il backup dei repository in un ambiente Windows?
Sono nuovo di SVN e mi piacerebbe sapere quali metodi sono disponibili per il backup dei repository in un ambiente Windows?
Risposte:
Potresti usare qualcosa come (Linux):
svnadmin dump repositorypath | gzip > backupname.svn.gz
Poiché Windows non supporta GZip è solo:
svnadmin dump repositorypath > backupname.svn
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
.
for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
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.
Sul sito Web di Subversion è disponibile uno script hotbackup.py che è abbastanza utile per automatizzare i backup.
http://svn.apache.org/repos/asf/subversion/trunk/tools/backup/hot-backup.py.in
Ecco uno script Perl che:
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.
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.
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.
È possibile creare un backup del repository ( dump ) con svnadmin dump
.
Puoi quindi importarlo usando svnadmin load
.
Riferimenti dettagliati in SVNBook: "Migrazione dei dati del repository mediante svnadmin"
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:
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.
Profitto!
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.
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 ...
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.
Per i repository ospitati è possibile utilizzare svn versione 1.7 svnrdump
, che è analogo ai svnadmin dump
repository 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.
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 hotcopy
comando, poiché si occuperà di problemi come file in uso e simili.
@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 completa e giornaliera basta usare gli script di backup SVN qui .
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/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 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 N
era 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 -r
2, 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.
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 svndump
su una macchina remota. Il restauro è davvero facile da quello - finora.
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