Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Produktivserver Backup der ZODB

Backup der ZODB

erstellt von Veit Schiele zuletzt verändert: 29.04.2010 14:59
Mitwirkende: Carsten Raddatz
© Veit Schiele 2006–2010

Zope bringt mit repozo.py ein Skript mit, das das Backup der ZODB im laufenden Betrieb ermöglicht. Es befindet sich wie schon zeopack.py in parts/zope2/utilities/ZODBTools/. Zudem lassen sich mit repozo.py auch inkrementelle Backups erstellen. plone.recipe.zope2instance erstellt einen Wrapper bin/repozo.

Um nun ein inkrementelles Backup zu erzeugen, erstellen wir zunächst das Verzeichnis backups, bevor wir repozo mit den entsprechenden Parametern aufrufen:

$ mkdir backups
$ ./bin/repozo -BvzQ -r backups -f var/filestorage/Data.fs

Soll ein Backup wieder zurückgespielt werden, sollte die Zope-Instanz zunächst gestoppt werden, eine Kopie der voraussichtlich korrupten Data.fs erstellt werden und erst dann repozo aufgerufen werden:

$ ./bin/repozo -Rv -r backups -o Data.fs

Anmerkung: Da repozo nach jedem Packen der ZODB wieder nur ein vollständiges Backup durchführen kann, empfiehlt sich das Packen deutlich weniger häufig als das Backup.

Dieser Eintrag kann auch automatisiert mit dem Rezept z3c.recipe.usercrontab erstellt werden. Hierzu wird in der deployment.cfg folgendes eingetragen:

[buildout]
parts =
    …
    backup-crontab

…

[backup-crontab]
recipe = z3c.recipe.usercrontab
times = 15 0 * * *
command = ${buildout:directory}/bin/repozo  -BvzQ -r ${buildout:directory}/backups -f ${buildout:directory}/var/filestorage/Data.fs

Backup mehrerer ZODBs einer Instanz

Mit collective.recipe.backup wird ein Skript erstellt, das für mehrere ZODBs Backups erstellen kann, z.B. zusätzlich für den Katalog in eigener ZODB:

[buildout]
parts =
    …
    backup

…

[backup]
recipe = collective.recipe.backup
additional_filestorages =
    Catalog
    Extra

Folgende zusätzliche Optionen bietet collective.recipe.backup:

location

Ort, an dem die Backups gespeichert werden.

Der Standardwert ist var/backups innerhalb des Buildout-Verzeichnisses.

Bei der expliziten Verwendung von location ist zu beachten, dass der letzte Teil der Angabe als Präfix verwendet wird. Die Angabe:

location = ${buildout:directory}/backups

werden im Ordner des Buildout-Projekts die Unterordner backups_Catalog und backups_Extra erzeugt. Diese enthalten dann die Backups der jeweiligen Datenbank.

keep

Anzahl der vollständigen Backups, die aufbewahrt werden.

Der Standardwert ist 2.

Alle älteren Backups einschließlich ihrer inkrementellen Backups werden automatisch gelöscht.

Wird der Wert auf 0 gesetzt, werden alle Backups aufbewahrt.

datafs
Falls sich die Data.fs nicht im Standardordner var/filestorage/Data.fs befindet kann der Pfad mit dieser Option überschrieben werden.
full
Üblicherweise werden inkrementelle Backups erstellt. Wird der Wert hier auf true gesetzt, werden jedesmal vollständige Backups erstellt.
debug
In seltenen Fällen sollte in die Log-Datei im debug-Level geschrieben werden. Dann sollte hier der Wert auf true gesetzt werden.
snapshotlocation

Ort, an dem die Schnappschüsse gespeichert werden sollen.

Der Standardwert ist var/snapshotbackups innerhalb des Buildout-Verzeichnisses. Bei expliziter Festlegung gelten bezüglich des Pfads dieselben Regeln für das Ordner-Präfix wie bei location.

gzip

Der Standardwert ist true.

Dabei ist die Endung gezippter ZODBs *.fsz und nicht *.fs.gz.

additional_filestorages
Hier können Sie zusätzliche Angaben machen, z.B. wenn Sie Ihren Katalog in eine eigene ZODB ausgelagert oder weitere ZODBs als Mount-Point eingebunden haben.

Bei Verwendung von collective.recipe.backup nach diesem Muster ändert man den command im Abschnitt [backup-crontab] auf:

[backup-crontab]
…
command = ${buildout:directory}/bin/backup

Löschen alter Backups

Alte Backups sollten nach einer bestimmter Zeit wieder gelöscht werden. In unserem folgenden Beispiel werden inkrementelle Backups nach zwei Wochen und vollständige Backups nach fünf Wochen gelöscht:

[buildout]
parts =
    …
    remove-incremental-backups
    remove-full-backups

…

[remove-incremental-backups]
recipe = z3c.recipe.usercrontab
times = 8 0 * * *
command = find ${buildout:directory}/backups -name \*deltafs -ctime +14 -exec rm {} \;

[remove-full-backups]
recipe = z3c.recipe.usercrontab
times = 8 0 * * *
command = find ${buildout:directory}/backups -name \*dat -ctime +35 -exec rm {} \;
Artikelaktionen