Domanda

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

È stato utile?

Soluzione

Potresti usare qualcosa come (Linux):

svnadmin dump repositorypath | gzip > backupname.svn.gz

Poiché Windows non supporta GZip è semplicemente:

svnadmin dump repositorypath > backupname.svn

Altri suggerimenti

Utilizziamo svnadmin hotcopy, ad esempio:

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

Come da il libro:

Puoi 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 disastro non c'è altro da fare che decomprimerlo e rimetterlo in posizione.

Sul sito web di Subversion è disponibile uno script hotbackup.py che è 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. Eseguire il backup del repository
  2. Copialo su un altro server tramite SCP
  3. Recupera il backup
  4. Crea un repository di prova dal backup
  5. Fai un checkout di prova
  6. Inviati un'e-mail 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`;

Origine dello script e ulteriori dettagli sulla logica di questo tipo di backup.

Io uso svnsync, che configura un server remoto come mirror/slave.Abbiamo avuto un guasto del server due settimane fa e sono riuscito a spostare lo slave nella posizione primaria abbastanza facilmente (dovevo solo reimpostare l'UUID sul repository slave sull'originale).

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

copia a caldo di svnadmin

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

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

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

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

  • È quindi possibile importarlo in using svnadmin load.

Riferimento dettagliato nel SVNBook:"Migrazione dei dati del repository utilizzando 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 è consentito arrestare il server, fallo e copia semplicemente il repository, con qualche script o uno strumento di backup.Cobian Backup si adatta bene a questo contesto poiché può arrestare e avviare automaticamente i servizi e può eseguire backup incrementali in modo da eseguire il backup solo delle parti del repository che sono state modificate di recente (utile se il repository è grande e si sta eseguendo il backup in una 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 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, pianificazione del backup, destinazione, compressione incl.suddivisione dell'archivio, ecc.

  3. Profitto!

ci sono 2 metodi principali per eseguire 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à nel tentativo di ripubblicare 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 del file system sottostante ed è potabile su qualsiasi tipo di server SVN basato sulla sottoversione di tigiris.org.

per quanto riguarda lo strumento di backup puoi 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 tuo server svn oppure puoi cercare su Google gli strumenti di backup svn.

la mia raccomandazione è di eseguire entrambi i tipi di backup e di portarli fuori dall'ufficio sul tuo account di posta elettronica, sul servizio Amazon S3, su FTP o sui servizi Azure, 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 dei 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 effettuare un backup del dump di un repository di subversion locale e remoto.Il software funziona allo stesso modo di "svnadmin" ma non è un frontend GUI su di esso.Utilizzare invece direttamente le librerie subversion per consentire la creazione di dump in modalità autonoma senza altri strumenti aggiuntivi.

Spero che questo aiuti...

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

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

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

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

Dopo aver scaricato il file dump è possibile importarlo localmente

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

o caricalo sull'host di tua scelta.

Se stai utilizzando il formato del repository FSFS (quello predefinito), puoi copiare il repository stesso per eseguire un backup.Con il vecchio sistema BerkleyDB, il repository non è indipendente dalla piattaforma e generalmente vorrai utilizzare svnadmin dump.

IL Argomento della documentazione svnbook per il backup raccomanda il svnadmin hotcopy comando, poiché si occuperà di problemi come i 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 in esecuzione che esegue i miei backup

Per la soluzione di backup giornaliero e completo basta utilizzare il file Script di backup SVN qui.

Ho compilato i passaggi che ho seguito allo scopo di eseguire un backup del remoto repository SVN 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 quello remoto, è sufficiente 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 una revisione incrementata dalla revisione effettiva 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 andava bene perché volevo solo qualche backup del repository remoto di tanto in tanto, nient'altro.

Verifica:

Per verificare, utilizza 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 controllare l'ultima revisione dal repository locale.Alla fine dice Checked out revision N.Questo N era una in più rispetto alla revisione effettiva trovata nel repository remoto (a causa del problema menzionato sopra).

Per verificare che svk riportasse anche tutta la cronologia, il checkout SVN è stato eseguito con varie revisioni precedenti utilizzando -r con 2, 10, 50 ecc.Quindi i file dentro <local-dir-path-to-checkout-onto> sono stati confermati come provenienti da quella revisione.

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

come altri hanno già detto, hot-backup.py del team Subversion ha alcune funzionalità interessanti rispetto al semplice fatto svnadmin hotcopy

Eseguo un'attività pianificata su uno script Python che esegue lo spider di tutti i miei repository sulla macchina e utilizza hotbackup per conservare copie a caldo per diversi giorni (paranoico della corruzione) e un svnadmin svndump su una macchina remota.Il ripristino è davvero semplice da questo - 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 Dump 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 il ripristino (caricamento) del repository SVN (Subversion) su Linux.
Rif: backup e ripristino di svn subversion

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top