SVN-Repository-Sicherungsstrategien

195

Ich bin neu bei SVN und möchte wissen, welche Methoden zum Sichern von Repositorys in einer Windows-Umgebung verfügbar sind.

Robert Dean
quelle
1
VisualSVN Server für Windows enthält eine integrierte Funktion zum planmäßigen Sichern und Überprüfen von SVN-Repositorys: visualsvn.com/server/features/backup
bahrep

Antworten:

179

Sie könnten so etwas wie (Linux) verwenden:

svnadmin dump repositorypath | gzip > backupname.svn.gz

Da Windows GZip nicht unterstützt, ist es nur:

svnadmin dump repositorypath > backupname.svn
Nicolai Reuschling
quelle
11
Ich weiß es nicht genau, aber sicherlich könnten einige Tools wie 7-zip Daten von STDIN komprimieren, was bedeutet, dass Sie den ersten Stil auch unter Windows verwenden könnten.
Nickf
5
Ich schaue mir das nur selbst an und ein Kommentar aus den Dokumenten svnbook.red-bean.com/nightly/en/… ist, dass Sie eine sehr große Ausgabe von svnadmin dump erhalten, es sei denn, Sie verwenden die Option --deltas.
Jason S
5
Und Windows unterstützt gzip, holen Sie es einfach von der unxutils-Webseite unxutils.sourceforge.net
Jason S
52
Verwenden von 7Zip: svnadmin dump repositorypath | "%ProgramFiles%\7-Zip\7z.exe" a backup.7z -sibackupname.svn Dadurch wird eine Datei mit dem Namen "backup.7z" erstellt, die eine einzelne Datei "backupname.svn" enthält, aus der ausgegeben wird svnadmin dump.
Matt
4
@ Josh Stodola Bash :for project in *; do svnadmin dump ${project} | gzip > /backuppath/${project}.svn.gz; done;
Fedir RYKHTIK
107

Wir verwenden svnadmin hotcopy, zB:

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

Gemäß dem Buch :

Sie können diesen Befehl jederzeit ausführen und eine sichere Kopie des Repositorys erstellen, unabhängig davon, ob andere Prozesse das Repository verwenden.

Sie können die Sicherungskopie natürlich per ZIP (vorzugsweise 7-Zip). IMHO Es ist die einfachste Sicherungsoption: Im Katastrophenfall gibt es nichts anderes zu tun, als sie wieder in Position zu entpacken.

Duncan Smart
quelle
13
Ich denke, svnadmin dump wird aus mehreren Gründen für Backups bevorzugt. Siehe svn.haxx.se/users/archive-2005-05/0842.shtml
daremon
4
@daremon: Ich schlage vor, Sie lesen die Antworten auf die Beiträge, auf die Sie verlinkt haben, insbesondere die, in denen svnadmin dump erwähnt wird, ohne die Steuerdateien des Repos.
Powerlord
enges Rennen, aber ich stimme für svnadmin Dump, nachdem ich die Antworten von R. Bemrose
Mobibob
Der Befehl hotcopy überschreibt oder erhöht die von ihm generierten Sicherungen nicht. Wenn Sie also planen, es in Windows mithilfe des Taskplaners
Ryan Sampson
1
Ein Wort der Warnung. Kopieren Sie keine svnsync-Spiegelkopie eines Repositorys, während svnsync ausgeführt wird! Die resultierende Kopie ist möglicherweise beschädigt. Siehe diesen Thread für Details: subversion.open.collab.net/ds/…
zvolkov
22

Hier ist ein Perl-Skript, das:

  1. Sichern Sie das Repo
  2. Kopieren Sie es über SCP auf einen anderen Server
  3. Rufen Sie das Backup ab
  4. Erstellen Sie ein Test-Repository aus der Sicherung
  5. Machen Sie eine Testkasse
  6. E-Mail mit Fehlern (per Cron)

Das Skript:

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`;

Skriptquelle und weitere Details zum Rational für diese Art der Sicherung.

Mark
quelle
19

Ich benutze svnsync , das einen Remote-Server als Spiegel / Slave einrichtet . Wir hatten vor zwei Wochen einen Serverausfall und ich konnte den Slave ganz einfach in die primäre Position bringen (musste nur die UUID im Slave-Repository auf das Original zurücksetzen).

Ein weiterer Vorteil besteht darin, dass die Synchronisierung von einem Zwischenhändler ausgeführt werden kann und nicht als Aufgabe auf einem der beiden Server. Ich hatte einen Client mit zwei VPNs, die ein Repository zwischen ihnen synchronisierten.

Tom Mayfield
quelle
Also synchronisiert es offensichtlich die neuesten Repo-Versionen zwischen den beiden?
PositiveGuy
1
Obwohl es im Titel steht, weiß ich nicht, dass ich es eine "Synchronisierung" nennen würde. Es ist wirklich ein Backup, bei dem der Master überarbeitet und auf den Slave gestellt wird. Wenn Sie Änderungen am Slave vornehmen, werden diese entweder die "Synchronisierung" unterbrechen oder zu Wahnsinn führen. Mit dem Tool sollen externe, schreibgeschützte Spiegel erstellt werden. Die Erstellung eines Sicherungsservers ist jedoch bewundernswert.
Tom Mayfield
1
Der Vorteil von svnsync ist, dass Sie dies sehr oft ausführen können. Alle zehn Minuten oder sogar bei jedem Commit (mit einem Hook). Dies hat den Vorteil, dass Sie den potenziellen Datenverlust reduzieren können, den Sie sonst zwischen der letzten Sicherung und dem Verlust des Live-Repos erhalten würden.
8DH
12

svnadmin hotcopy

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Dieser Unterbefehl erstellt eine vollständige "Hot" -Sicherung Ihres Repositorys, einschließlich aller Hooks, Konfigurationsdateien und natürlich Datenbankdateien.

Adam
quelle
10

svnbackup bei Google Code, einer .NET-Konsolenanwendung.

Uwe Keim
quelle
5

Grundsätzlich ist es sicher, den Repository-Ordner zu kopieren, wenn der SVN-Server gestoppt wird. (Quelle: https://groups.google.com/forum/?fromgroups#!topic/visualsvn/i_55khUBrys%5B1-25%5D )

Wenn Sie also den Server stoppen dürfen, tun Sie dies und kopieren Sie das Repository entweder mit einem Skript oder einem Sicherungsprogramm. Cobian Backup passt gut hierher, da es Dienste automatisch stoppen und starten kann und inkrementelle Sicherungen durchführen kann, sodass Sie nur Teile des Repositorys sichern, die sich kürzlich geändert haben (nützlich, wenn das Repository groß ist und Sie an einem Remotestandort sichern ).

Beispiel:

  1. Installieren Sie Cobian Backup
  2. Fügen Sie eine Sicherungsaufgabe hinzu:

    • Quelle auf Repository-Ordner setzen (zB C:\Repositories\),

    • Pre-Backup-Ereignis "STOP_SERVICE"hinzufügen VisualSVN,

    • Post-Backup-Ereignis "START_SERVICE"hinzufügen, VisualSVN,

    • Stellen Sie nach Bedarf andere Optionen ein. Wir haben inkrementelle Sicherungen eingerichtet, einschließlich Entfernen alter Sicherungen, Sicherungszeitplan, Ziel, Komprimierung inkl. Archivaufteilung etc.

  3. Profitieren!

atx
quelle
4

Es gibt zwei Hauptmethoden zum Sichern eines SVN-Servers: Die erste ist Hotcopy, mit der eine Kopie Ihrer Repository-Dateien erstellt wird. Das Hauptproblem bei diesem Ansatz besteht darin, dass Daten über das zugrunde liegende Dateisystem gespeichert werden, sodass Sie möglicherweise Schwierigkeiten haben, einen Repostore durchzuführen Diese Art der Sicherung auf einem anderen SVN-Server oder einem anderen Computer. Es gibt eine andere Art von Sicherung, die als Dump bezeichnet wird. Diese Sicherung speichert keine Informationen über das zugrunde liegende Dateisystem und dessen Trinkbarkeit auf SVN-Servern aller Art, die auf der Subversion von tigiris.org basieren.

Informationen zum Sicherungstool Sie können das svnadmin-Tool (es kann Hotcopy und Dump ausführen) über die Eingabeaufforderung verwenden. Diese Konsole befindet sich in demselben Verzeichnis, in dem sich Ihr SVN-Server befindet, oder Sie können nach SVN-Sicherungstools suchen.

Meine Empfehlung ist, dass Sie beide Arten von Sicherungen durchführen und sie aus dem Büro auf Ihr E-Mail-Konto, Ihren Amazon S3-Dienst, Ihre FTP- oder Azure-Dienste übertragen. Auf diese Weise erhalten Sie eine sichere Sicherung, ohne den SVN-Server irgendwo außerhalb hosten zu müssen dein Büro.

Jose Manuel Ojeda
quelle
4

Hier ein GUI-Windows-Tool zum Erstellen eines Speicherauszugs lokaler und entfernter Subversion-Repositorys:

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

Die Werkzeugbeschreibung lautet:

Mit diesem einfachen Tool können Sie ein Dump-Backup eines lokalen und Remote-Subversion-Repositorys erstellen. Die Software funktioniert genauso wie "svnadmin", ist jedoch kein GUI-Frontend darüber. Verwenden Sie stattdessen direkt die Subversion-Bibliotheken, um einen Dump im Standalone-Modus ohne ein anderes zusätzliches Tool zu erstellen.

Ich hoffe das hilft...

Suppaman
quelle
Vielen Dank für das Teilen, macht genau wie angegeben.
Ed DeGagne
3

Ich kopiere einfach das gesamte Repo-Verzeichnis an meinen Sicherungsspeicherort. Auf diese Weise können Sie, wenn etwas passiert, das Verzeichnis einfach zurückkopieren und sofort einsatzbereit sein.

Stellen Sie einfach sicher, dass Sie bei Bedarf die Berechtigungen beibehalten. Normalerweise ist dies nur auf Linux-Computern ein Problem.

Mischa M.
quelle
7
Dies ist nicht gerade sicher, wenn jemand während eines Kopiervorgangs ein Commit durchführt. Dies ist mir sogar passiert, wenn nur 4 Personen Zugriff auf das Repo haben und es nur selten verwenden. Siehe Duncans Antwort zur Verwendung von Hotcopy.
Nickf
Wenn Sie jedoch komplett alleine arbeiten, gehe ich davon aus, dass dies ein sicherer Weg ist, ein Repo zu sichern. Ich verwende Subversion für meine persönlichen Projekte, und das mache ich gerade.
Andrew Garrison
3

Für gehostete Repositorys können Sie seit SVN Version 1.7 verwenden svnrdump, was svnadmin dumpfür lokale Repositorys analog ist . Dieser Artikel bietet einen schönen Durchgang, der sich im Wesentlichen auf Folgendes beschränkt:

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

Nachdem Sie die Dump-Datei heruntergeladen haben, können Sie sie lokal importieren

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

oder laden Sie es auf den Host Ihrer Wahl hoch.

Andreas J.
quelle
3

Wenn Sie das FSFS-Repository-Format (Standardeinstellung) verwenden, können Sie das Repository selbst kopieren, um eine Sicherung durchzuführen. Mit dem älteren BerkleyDB-System ist das Repository nicht plattformunabhängig und Sie möchten im Allgemeinen den Svnadmin-Dump verwenden.

Das svnbook-Dokumentationsthema für die Sicherung empfiehlt den svnadmin hotcopyBefehl, da er Probleme wie verwendete Dateien und dergleichen behebt .

Crashmstr
quelle
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

Dies ist die Batch-Datei, die ich ausgeführt habe und die meine Backups durchführt

RoughPlace
quelle
2

Verwenden Sie für die tägliche und vollständige Sicherungslösung einfach die SVN-Sicherungsskripte hier .

McGarnagle
quelle
1

Ich habe die Schritte zusammengestellt, die ich ausgeführt habe, um eine Sicherungskopie des Remote-SVN-Repositorys meines Projekts zu erstellen.

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

Dies braucht Zeit und besagt, dass die Protokolle aus dem Repository abgerufen werden. Es erstellt eine Reihe von Dateien im Inneren C:\Documents and Settings\nverma\.svk\local.

Führen Sie von Zeit zu Zeit den vorherigen Befehl aus, um dieses lokale Repository mit den neuesten Änderungen gegenüber dem Remote-Repository zu aktualisieren.

Jetzt können Sie mit Ihrem lokalen Repository ( /home/user/.svk/localin diesem Beispiel) spielen, als wäre es ein normales SVN-Repository!

Das einzige Problem bei diesem Ansatz besteht darin, dass das lokale Repository mit Revisionsinkrementen um die tatsächliche Revision im Remote-Repository erstellt wird. Wie jemand schrieb:

Der Befehl svk miror generiert ein Commit im gerade erstellten Repository. Bei allen durch die nachfolgende Synchronisierung erstellten Commits werden die Revisionsnummern im Vergleich zum öffentlichen Remote-Repository um eins erhöht.

Dies war jedoch für mich in Ordnung, da ich nur von Zeit zu Zeit eine Sicherung des Remote-Repositorys wünschte, sonst nichts.

Überprüfung:

Verwenden Sie zur Überprüfung den SVN-Client mit dem lokalen Repository wie folgt:

svn checkout "file:///C:/Documents and Settings\nverma/.svk/local/"  <local-dir-path-to-checkout-onto>

Dieser Befehl dient dann zum Auschecken der neuesten Version aus dem lokalen Repository. Am Ende steht es Checked out revision N. Dies Nwar eine mehr als die tatsächliche Revision, die im Remote-Repository gefunden wurde (aufgrund des oben genannten Problems).

Um zu überprüfen, ob svk auch den gesamten Verlauf mitbrachte, wurde die SVN-Prüfung mit verschiedenen älteren Revisionen unter Verwendung -rvon 2, 10, 50 usw. ausgeführt. Anschließend <local-dir-path-to-checkout-onto>wurde bestätigt, dass die Dateien in dieser Revision stammen.

Am Ende komprimieren Sie das Verzeichnis C:/Documents and Settings\nverma/.svk/local/und speichern Sie die Zip irgendwo. Mach das regelmäßig weiter.

Nitin Verma
quelle
0

Wie andere gesagt haben, hat hot-backup.py vom Subversion-Team einige nette Funktionen svnadmin hotcopy

Ich führe eine geplante Aufgabe auf einem Python-Skript aus, das für alle meine Repositorys auf dem Computer spinnen kann, und verwende Hotbackup, um Hotcopies im Wert von mehreren Tagen (paranoid von Korruption) und svnadmin svndumpauf einem Remotecomputer zu speichern . Die Restaurierung ist wirklich einfach - bis jetzt.

schnelltrocknend
quelle
0

1.1 Erstellen Sie einen Dump aus dem SVN-Repository (Subversion)

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

Echtes Beispiel

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

1.2 Gzip Erstellt Dump

gzip -9 /path/to/reponame.dump

Echtes Beispiel

gzip -9 /backups/testrepo.dump

1.3 SVN Dump und Gzip Dump mit Einzeiler

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

Echtes Beispiel

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

So sichern (sichern) und wiederherstellen (laden) Sie das SVN-Repository (Subversion) unter Linux.
Ref: svn subversion backup andrestore

Aamir Shahzad
quelle