Datenbank Backup
Datenbanken sichern
Vor einiger Zeit stellte ich in einem Blogpost Datenbanken mit bareos sichern ein Skript vor, mit dem sich über bareos oder rsnapshot angetriggert Datenbanken backuppen lassen. Das Skript hatte den Schwerpunkt PostgreSQL- und MySQL-Datenbanken in Textdateien zu "dumpen" um diese dann von dem eigentlichen Backupprogramm sichern zu lassen.
Das Skript entwickelt sich weiter
Im laufe der Zeit kamen noch ein paar Anforderungen und Ideen für das Skript hinzu:
- Das Backupskript sollte mittels Konfigurationsdateien so eingestellt werden können, so dass es autonom (über cron oder ein anderes Programm angesteuert) laufen kann oder aber interakv mit Angabe von Parametern aufrufbar ist.
- Datenbanken (allen voran Postgres) sollen lokal, nicht über einen TCP/IP-Socket und auch über TCP/IP-Verbindungen gesichert werden können.
- Verschiedene Datenbanken-Typen sollen mittels dieses Skriptes gesichert werden können (PostgreSQL, MySQL/MariaDB, mongoDB, etc.).
- Optional soll eine Historie der Sicherungsdateien über ein konfigurierbaren Zeitraum vorgehalten werden.
- Optional sollen die Meldungen des Skriptes über syslog protokolliert werden.
- Zugangsdaten für Postgresdatenbanken sowie die Datenbankennamen und Zielhosts sollen aus der ~/.pgpass - Datei des Backupbenutzers ausgelesen werden. Ähnliches soll, sofern möglich, auch für die anderen Datenbankentypen umgesetzt werden.
Der aktuelle Stand
Von eben genannten Dingen stehen derzeit noch ein paar aus:
- Funktionen zum Sichern von MySQL/MariaDB (bisher nur ein sehr unvollständigerPrototyp),
- Funktionen zum Sichern von MongoDB,
- Funktionen zum Sichern von Oracle-Datenbanken,
- Paralleles sichern einzelner Datenbanken,
- Implementierung des interaktiven Modus.
Grundlegend ist die "Weiche" für den interaktiven und den autonomen Modus eingebaut. Das Skript hat den Namen "dbb". Wird ein Symlink namens "dbbi" erzeugt der auf "ddb" zeigt und der Symlink dann aufgerufen, entscheidet das Skript anhand des aufgerufenen Namens ob es interaktiv oder autonom ausgeführt wird. Auch die Möglichkeit der Modularisierung mit Plugins ziehe ich derzeit ebenfalls in Betracht um die Länge des Skriptes nicht ausufern zu lassen.
Der Programmierstil
Bei der Weiterentwicklung des Skriptes war mir besonder wichtig das Skript insgesamt möglichst gut lesbar zu halten. Dazu habe ich mir ein paar kleinere Regeln überlegt:
- Variablen weden nur in Großbuchstaben geschrieben,
- Variablennamen sollen weitestgehend selbsterklärend sein,
- bestehen Variablennamen aus mehreren Wörtern so werden diese mit einem Unterstrich voneinander getrennt,
- Globale Variablen kommen aus der Konfigurationsdatei
- Funktionsnamen werden immer klein geschrieben,
- Funktionsnamen sollen weitestgehend selbserklärend sein,
- bestehen Funktionsnamen aus mehreren Wörtern, so werden diese durch einen Unterstrich getrennt,
- Kommentare sollen grob erklären was der nachfolgende Abschnitt machen soll,
- es soll keine Begrenzung der Zeilelänge geben,
- das gesamte Skript soll logisch in Abschnitte gegliedert werden,
- eine erweiterte Inforationsausgabe über die aktuell durchgeführten Aktionen sollen über eine Debug-Funktion optional ausgegeben werden können.
Hintergrund dieser Regeln ist recht trivial: In einem halben Jahr möchte ich in der Lage sein das Skript wieder lesen und verstehen zu können. Ob das auch auf den geneigten Leser zutrifft muss ich wohl Euch überlassen und würde mich über ein Feedback per Mail freuen.
Das Skript
Das Skript liste ich an dieser Stell nicht mehr, da es mittlerweise einfach zu lang geworden ist. Der Link zu dem Skirpt lautet wie folgt:
https://github.com/pditzel/scripts/tree/master/dbbackup
Das Skript habe ich unter debian GNU/Linux entwickelt und ein paar debian-spezifische Dinge eingebaut. Evtl. hat der ein oder andere von Euch noch ein paar Ideen das Skript zu anzupassen, dass es auch unter anderen Linuxdistros läuft oder auch unter anderen Unices.