Der beste Weg, um Subversion-Backups durchzuführen?

10

Was ist der beste Weg, um Subversion-Backups durchzuführen (auf einem Debian-basierten Server)?

Ist es svnadmin zu verwenden?

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

Oder vielleicht nur, um das Verzeichnis zu tarieren, in dem sich die Repositories befinden?

tar -cvzf svn.backup.tar.gz /var/subversion/

Was sind die Vor- und Nachteile der oben genannten?

Danke Johan


Update : Dies ist ein kleiner Server mit nur einer Handvoll Repos. Daher sind inkrementelle Backups wahrscheinlich nicht erforderlich. Ich denke, es ist besser, sich darauf zu konzentrieren, es einfach zu halten.

Update : Ich habe das Packs-Wrapper-Skript (das wiederum ein Wrapper für svn-hot-backup war) verwendet, um eine vollständige Sicherung durchzuführen, und dann eine vollständige Wiederherstellung auf einem anderen sauberen Computer durchgeführt. Ich habe jedoch den Teil "SVN_HOTBACKUP_NUM_BACKUPS = 10" entfernt, da er bei mir nicht funktioniert hat.

Bitte beachten Sie, dass ich der Meinung bin, dass es ziemlich einfach war und das Ergebnis sehr nahe daran war, nur das Ziel zu erreichen. Aber wie Manni hier betonte, ist die Verwendung von svn-hot-backup / "svnadmin hotcopy" eine zuverlässigere Methode, da tar von Zeit zu Zeit beschädigte Backups erstellen kann, wenn Sie Pech haben.

Johan
quelle

Antworten:

11

Suchen Sie nach dem Skript svn-hot-backup. Es sollte mit Subversion ausgeliefert werden und enthält die gesamte Logik, um das zu tun, was Sie wollen, sowie das automatische Ausrollen alter Backups. Ich habe das folgende Wrapper-Skript geschrieben, das svn-hot-backup verwendet, um als nächtlicher Cronjob ausgeführt zu werden, um einen einzelnen Server mit mehreren Repositorys zu sichern, der leicht modifiziert wurde, um verallgemeinert zu werden.

#!/bin/bash

#
# Dumps the svn repos to a file and backs it up
# to a local directory.

#Keeps the last 10 revisions
REPODIR="/var/repos"
BAKDIR="/data/backup/svn"
PROG="/usr/local/sbin/svn-hot-backup"
REPOLIST='repo1 repo2 repo3'

if [ ! -x "${PROG}" ]
then
        echo "svnbak: Could not execute \`${PROG}\`"
        exit 1
fi

for repo in ${REPOLIST}
do
    # Dump the database to a backup file
    echo "svnbak: Dumping subversion repository:  ${repo}"
    SVN_HOTBACKUP_NUM_BACKUPS=10 nice ${PROG} --archive-type=gz ${REPODIR}/${repo} ${BAKDIR}/${repo} &> /tmp/svnbak.$$

    if [ "$?" -eq "1" ]
    then
        echo "svnbak: Hot backup on '${repo}' failed with message:"
        /bin/cat /tmp/svnbak.$$
    fi

    /bin/rm /tmp/svnbak.$$
done

exit 0
Scott Pack
quelle
1
Und da dies ein Wrapper für svnadmin hotcopy ist, kopiere ich zum Wiederherstellen wohl einfach die Dateien unter / var / subversion / repos /? Muss ich noch etwas tun
Johan
'svnadmin verify' ist auch eine gute Ergänzung zum Skript, um zu überprüfen, ob das gerade kopierte Repository tatsächlich gültig ist.
Andrioid
@ Johan - ja, kopiere sie einfach. "Das resultierende Backup ist ein voll funktionsfähiges Subversion-Repository, das als Ersatz für Ihr Live-Repository abgelegt werden kann, falls etwas schrecklich schief geht." von svnbook.red-bean.com/nightly/en/…
Jonik
Sie können auch den Befehl find verwenden, um nach Repositorys zu suchen, die sich erst in den letzten N Tagen geändert haben. Suchen Sie einfach in der Ausgabe des Befehls find nach 'db / current'. Dies hat den Vorteil, dass Sie diese REPOLIST-Variable nicht ständig aktualisieren müssen. In SVN 1.8 müssen Sie nicht mehr an ein leeres Ziel kopieren, sondern können an eine vorherige Hotcopy anhängen. Dies wird Hotcopy-Backups wahrscheinlich um 2-3 Größenordnungen beschleunigen.
Tgharold
9

Haben Sie die Dokumentation dazu gesehen?

Grundsätzlich haben Sie zwei Möglichkeiten:

  1. Führen Sie inkrementelle Sicherungen mit durch svnadmin dump
  2. Sichern Sie Ihr gesamtes Repository mit svnadmin hotcopy

Das einfache Erstellen einer Kopie des Verzeichnisses ist keine Option, da sich Ihr Repository möglicherweise ändert, während die Kopie erstellt wird.

Ob Sie inkrementelle oder vollständige Sicherungen durchführen, hängt von Ihrer Paranoia, der Größe Ihres Repositorys, Ihren Anforderungen und Ihrer Infrastruktur ab.

innaM
quelle
4

Ich empfehle SVNBackup , da es inkrementelle Sicherungen durchführen kann .

Warum ist das wichtig? Wenn Sie ein großes Entwicklungsteam haben und ein tägliches Subversion-Backup haben und Ihr System 12 Stunden nach dem alten Backup ausfällt, geht die Arbeit des gesamten Tages verloren.

Wenn Sie mehrmals täglich vollständige Sicherungen durchführen (was SVN-Hotcopy ist), verursachen Sie unnötigen Ladevorgang auf Ihrem Repository-Computer, was ungeduldige Entwickler irritiert.

Als Bonus; Ich empfehle auch Backup-PC als Backup-Lösung. Es kann inkrementelle Remote-Sicherungen durchführen und viel Platz sparen, wenn Sie identische Dateien auf verschiedenen Systemen sichern.

Andrioid
quelle
4

Ich verwende svnsync, um in ein ansonsten schreibgeschütztes Repository zu sichern, das selbst mit veralteten Kopien (Tag, Woche, Monat) gesichert ist.

Steven R. Loomis
quelle
Aus dem Handbuch "Und obwohl es nur wenige Möglichkeiten gibt, dies zu tun, besteht seine Hauptstärke darin, dass es fernbedient werden kann".
Johan
+1 für die Erwähnung von svnsync - like dumpund hotcopyes hat sicherlich seine Verwendung. Dies kann auch für lokale inkrementelle Sicherungen sehr praktisch sein.
Jonik
Und wenn sich der Sicherungsserver an einem anderen Ort befindet, lösen Sie viele Wiederherstellungsfälle in einem einzigen Schritt
Zac Thompson
1
Zwei Dinge, wenn Sie den svnsync-Weg gehen: 1) Wenn Sie ein großes Repo haben, beginnen Sie mit einer svnadmin-Hotcopy, da diese viel schneller ist und Daten über / db / revs hinaus sichert. 2) Fügen Sie den svnsync-Aufruf zum Quell-Repo hinzu Post-Commit-Hook, damit der Spiegel immer auf dem neuesten Stand ist. (Aber halten Sie das aus den Haken des Spiegels, damit der Spiegel nicht versucht, sich selbst zu spiegeln!)
Robert Calhoun
2

Sie können inkrementelle Backups mit svnadmin erstellen, wenn Sie dies wünschen. Führen Sie die Datei hot-backup.py aus, bevor Sie Ihr Tar-Archiv erstellen .

Hier ist ein Artikel über das Sichern von SVN-Repos. Wie bereits erwähnt, ist das Lesen des SVN-Buches ein guter Ausgangspunkt.

Maxwell
quelle
0

Ich sichere mehrere 100 GB + SVN-Repositorys mit einfachem alten Rsync. svnadmin dumpund svnadmin hotcopywürde Tage auf diesen Repositories dauern.

Eine andere Sache, die Sie beobachten sollten, ist, svnadmin dumpkeine Sperren und Hook-Skripte zu sichern.

kband
quelle
-1

Folgendes mache ich mit meinen Repositorys: Verwenden Sie einen Ordnersicherungsdienst wie Dropbox (hier ist ein Link zu ihrer Linux-Version ). Sie machen die Dropbox einfach zum Stammverzeichnis Ihres Repositorys (oder sogar darüber) und sie wird jedes Mal gesichert, wenn sich eine Datei ändert. Es wird nicht nur computerübergreifend verfügbar sein, sondern Sie können auch online darauf zugreifen und Versionen davon haben.

Es gibt mehrere solcher Online-Backup-Dienste - die meisten sind bis zu 2 GB kostenlos.

Travelling Tech Guy
quelle
1
Dies ist in Ordnung für kleine persönliche Repos, aber kaum der "beste Weg", den das Poster sucht. Ein Problem ist, dass Sie nicht die Konsistenz mit dem gleichzeitigen Zugriff mehrerer Entwickler garantieren können. Die Hauptziele eines Backups sollten Zuverlässigkeit und Konsistenz sein, anstatt Online-Zugriff und -Versionen.
Martijn Heemels