Automatisierte Backups sind wie eine elektrische Zahnbürste – nur eben für deine Datenbank. Regelmäßige Backups retten die Welt (in diesem Fall: deine Daten) vor der Katastrophe. Niemand will um 3 Uhr morgens eine Nachricht bekommen, dass der Server abgestürzt ist, und dann feststellen, dass das letzte Backup zwei Wochen alt ist. Automatisierung löst das Problem: Kein Risiko mehr durch menschliche Vergesslichkeit.
Es gibt viele Tools zur Automatisierung, aber heute schauen wir uns die zwei beliebtesten an:
cron– der universelle und altbekannte Task-Scheduler unter Linux.pg_cron– ein PostgreSQL-Extension, mit dem du Tasks direkt über den Datenbankserver starten kannst.
Das pg_cron-Extension nutzt unter der Haube den cron-Service. Dieser Service ist nur unter Linux verfügbar!
Los geht's!
pg_cron installieren
pg_cron ist ein PostgreSQL-Extension, mit dem du automatische Tasks direkt in der Datenbank planen kannst. Das ist schick, praktisch und macht deinen PostgreSQL-Server zu einer kleinen Schaltzentrale.
Installationsschritte:
- Stell sicher, dass du PostgreSQL 10+ verwendest, denn
pg_cronläuft nur auf modernen Versionen. Installiere das Extension mit dem Paketmanager deiner Distribution. Für Ubuntu zum Beispiel:
sudo apt install postgresql-<version>-cronErsetze
<version>durch die Version von PostgreSQL, die bei dir installiert ist.Aktiviere das Extension in der PostgreSQL-Konfiguration. Öffne die Datei
postgresql.confund füge hinzu:shared_preload_libraries = 'pg_cron'Warum?
pg_cronbraucht, dass die Library beim Start von PostgreSQL geladen wird – das ist Pflicht.Starte den PostgreSQL-Server neu:
sudo systemctl restart postgresqlAktiviere das Extension in deiner Datenbank:
CREATE EXTENSION pg_cron;
Jetzt ist pg_cron einsatzbereit!
Ein Backup-Job automatisch anlegen
Das coole an pg_cron ist, dass du Kommandos zu bestimmten Zeiten ausführen kannst. Lass uns einen Job anlegen, der automatisch pg_dump ausführt.
Beispiel:
SELECT cron.schedule(
'nightly_backup', -- job-name
'0 2 * * *', -- zeitplan (jede Nacht um 2 Uhr)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- kommando
);
Was passiert hier?
'nightly_backup'– ein selbstgewählter Name für den Job, damit du ihn leicht wiedererkennst.'0 2 * * *'– Zeitplan im cron-Format: jeden Tag um 2:00 Uhr.- Das Kommando in
$$ $$: Wir führenpg_dumpaus, um ein Backup deruniversity-Datenbank zu machen.
Nach dem Anlegen läuft der Job automatisch nach Zeitplan!
pg_cron-Jobs anzeigen und löschen
Um alle existierenden Jobs zu sehen:
SELECT * FROM cron.job;
Wenn ein Job nicht mehr gebraucht wird, kannst du ihn so löschen:
SELECT cron.unschedule(job_id);
Ersetze job_id durch die ID aus dem obigen Query.
cron für die Automatisierung nutzen
Wenn du lieber den klassischen Linux-Weg gehen willst oder pg_cron aus irgendeinem Grund nicht verfügbar ist, hilft dir der allmächtige cron.
Einen Job mit cron anlegen
Stell zuerst sicher, dass cron installiert und aktiv ist:
sudo systemctl enable cron
sudo systemctl start cron
Jetzt legen wir einen Job für das Backup an. Öffne den Editor für die cron-Jobs:
crontab -e
Füge folgende Zeile hinzu:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Diese magische Zeile macht Folgendes:
- Jeden Tag um 2 Uhr nachts (
0 2 * * *) wird ein Backup deruniversity-Datenbank erstellt. - Alle Backups landen in der Datei
/backups/university_backup.dump.
Nach dem Speichern der crontab-Datei wird der geplante Job automatisch ausgeführt.
cron-Logs anschauen
Manchmal willst du wissen, was schiefgelaufen ist. Stell sicher, dass die Ausgabe der Kommandos in eine Log-Datei geschrieben wird. Dafür leite die Ausgabe um:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
Jetzt wird alles, was beim Ausführen des Jobs passiert, in /var/log/backup.log gespeichert.
pg_cron vs. cron – Vergleich
Wir haben also zwei mächtige Tools. Wie entscheidest du dich?
pg_cronist super, wenn du Zeitpläne und Jobs direkt in PostgreSQL verwalten willst. Das ist bequem, du musst die Datenbank nicht verlassen und kannst Tasks einfach skalieren.cronist universeller. Du kannst ihn nicht nur für PostgreSQL nutzen, sondern auch für alle anderen Automatisierungsaufgaben.
| Eigenschaft | pg_cron | cron |
|---|---|---|
| Integration | In PostgreSQL eingebaut, braucht aber ein Extension | Läuft für alle Prozesse |
| Installation | Extension muss installiert werden | In fast allen Linux-Systemen schon dabei |
| Logs | Werden in PostgreSQL gespeichert (Tabelle cron.job_run_details) |
Stehen in den System-Logs (meist /var/log/syslog) |
| Flexibilität | Führt nur SQL in PostgreSQL aus | Kann beliebige Kommandos, Skripte und Binaries starten |
Überprüfen, ob die Jobs laufen
Um zu checken, ob das Backup funktioniert, kannst du das cron-Kommando auch manuell ausführen:
pg_dump -U username -F c -f /backups/university_backup.dump university
Außerdem lohnt es sich, regelmäßig nachzusehen, ob die Backup-Dateien im angegebenen Verzeichnis liegen, wie groß sie sind und wann sie zuletzt erstellt wurden. Zum Beispiel:
ls -lh /backups/
Schau regelmäßig in die Logs und stell sicher, dass die Jobs sauber laufen.
Typische Fehler einfach vermeiden
Fehler Nr. 1: "Berechtigungen vergessen!"
Wenn der User, unter dem cron läuft, keine Rechte für pg_dump hat, klappt der Job nicht. Stell sicher, dass der User Zugriff auf die Datenbank hat.
Fehler Nr. 2: "Datei ist am falschen Ort!"
Gib immer den kompletten Pfad zu Dateien und Kommandos an. cron kennt deine Umgebung nicht – also immer den vollen Pfad: pg_dump -> /usr/bin/pg_dump.
Fehler Nr. 3: "Wo sind meine Logs?"
Vergiss nicht, die Ausgabe des Kommandos in eine Log-Datei umzuleiten. Ohne das bekommst du keine Infos über Fehler.
Jetzt bist du bereit für automatische Backups deiner Datenbank. Selbst wenn dein Server plötzlich Urlaub macht, sind deine Daten sicher!
GO TO FULL VERSION