CodeGym /Kurse /SQL SELF /Automatisierung von Backups mit pg_cron und...

Automatisierung von Backups mit pg_cron und cron unter Linux einrichten

SQL SELF
Level 44 , Lektion 0
Verfügbar

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:

  1. cron – der universelle und altbekannte Task-Scheduler unter Linux.
  2. 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:

  1. Stell sicher, dass du PostgreSQL 10+ verwendest, denn pg_cron läuft nur auf modernen Versionen.
  2. Installiere das Extension mit dem Paketmanager deiner Distribution. Für Ubuntu zum Beispiel:

    sudo apt install postgresql-<version>-cron
    

    Ersetze <version> durch die Version von PostgreSQL, die bei dir installiert ist.

  3. Aktiviere das Extension in der PostgreSQL-Konfiguration. Öffne die Datei postgresql.conf und füge hinzu:

    shared_preload_libraries = 'pg_cron'
    

    Warum? pg_cron braucht, dass die Library beim Start von PostgreSQL geladen wird – das ist Pflicht.

  4. Starte den PostgreSQL-Server neu:

    sudo systemctl restart postgresql
    
  5. Aktiviere 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ühren pg_dump aus, um ein Backup der university-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 der university-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_cron ist 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.

  • cron ist 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!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION