Skip to main content Skip to page footer
Automatisierte Datenbank-Backups per Bash-Skript

Automatisierte Datenbank-Backups per Bash-Skript

| Web Development | Geschätzte Lesezeit : min.

Regelmäßige Backups deiner Datenbanken sind entscheidend, um Datenverlust zu vermeiden und eine schnelle Wiederherstellung zu ermöglichen. Hier zeige ich dir, wie du mit einem einfachen Bash-Skript und einem Cronjob automatisierte Backups für mehrere Datenbanken einrichtest. Zusätzlich kannst du jedem Projekt einen Bezeichner zuweisen, damit du die Backups leichter zuordnen kannst.

Vorbereitung

Zunächst benötigen wir ein Bash-Skript, das die Backups erstellt und komprimiert. Außerdem soll es alte Backups automatisch löschen. Die folgenden Schritte erklären dir, wie das Skript aufgebaut ist und wie du es für deine Zwecke anpassen kannst.

Das Bash-Skript

Hier ist das vollständige Skript:

#!/bin/bash
# Array von Datenbankkonfigurationen: "DB_NAME;DB_USER;DB_PASS;DB_SERVER;PROJECT_LABEL"
DB_CONFIGS=(
    "datenbank1;benutzer1;passwort1;server1;projekt1"
    "datenbank2;benutzer2;passwort2;server2;projekt2"
    "datenbank3;benutzer3;passwort3;server3;projekt3"
)
BACKUP_DIR="/pfad/zu/deinem/backup-verzeichnis"
DATE=$(date +"%Y%m%d_%H%M%S")
# Sicherstellen, dass das Backup-Verzeichnis existiert
mkdir -p $BACKUP_DIR
# Backups für jede Datenbank erstellen und komprimieren
for CONFIG in "${DB_CONFIGS[@]}"; do
    IFS=';' read -r DB_NAME DB_USER DB_PASS DB_SERVER PROJECT_LABEL <<< "$CONFIG"
    mysqldump --opt --no-tablespaces -u "$DB_USER" -p"$DB_PASS" -h "$DB_SERVER" "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${PROJECT_LABEL}_backup_$DATE.sql.gz"
done
# Alte Backups löschen (älter als 7 Tage)
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -exec rm {} \;
# Erfolgsmeldung
echo "Backups erstellt und alte Backups gelöscht."

Erklärung des Skripts

  • Konfigurationen: Im Array DB_CONFIGS sind die Datenbankkonfigurationen definiert. Jede Konfiguration besteht aus DB_NAME, DB_USER, DB_PASS, DB_SERVER und PROJECT_LABEL. Füge hier einfach weitere Datenbanken hinzu, indem du weitere Einträge in das Array aufnimmst.
  • Backup-Verzeichnis: Das Skript stellt sicher, dass das Backup-Verzeichnis existiert, und erstellt es bei Bedarf.
  • Backup erstellen und komprimieren: Das Skript iteriert über jede Datenbankkonfiguration, erstellt ein Backup und komprimiert es mit gzip. Der Dateiname enthält den Projektnamen, das Datum und die Uhrzeit, was die Zuordnung erleichtert.
  • Alte Backups löschen: Dateien, die älter als 7 Tage sind, werden automatisch gelöscht, um Speicherplatz zu sparen.

Einrichten des Cronjobs

Um das Skript regelmäßig auszuführen, richtest du einen Cronjob ein. Öffne die Crontab-Konfiguration mit crontab -e und füge die folgende Zeile hinzu:

0 */6 * * * /pfad/zu/deinem/skript.sh

Dieser Cronjob führt das Skript alle 6 Stunden aus. Passe den Pfad zum Skript entsprechend an.

Viele Webhoster erlauben, Cronjobs über eine Weboberfläche einzurichten. Wenn du dir nicht sicher bist, wie du einen Cronjob einrichtest, schau in der Dokumentation deines Webhosters nach oder nutze deren Webinterface für Cronjobs. Das macht die Einrichtung oft einfacher und übersichtlicher.

Sicherung und Wiederherstellung

Durch regelmäßige Backups bist du auf der sicheren Seite. Sollte mal etwas schiefgehen, kannst du schnell auf die Backups zurückgreifen und die Datenbank wiederherstellen.

Zum Wiederherstellen eines Backups führst du den folgenden Befehl aus:

gunzip < /pfad/zu/deinem/backup-verzeichnis/datenbank1_projekt1_backup_20220101_120000.sql.gz | mysql -u benutzer1 -p datenbank1

Fazit

Mit diesem einfachen Skript und einem Cronjob kannst du deine Datenbanken regelmäßig sichern und die Backups bequem verwalten. Passe das Skript einfach an deine Bedürfnisse an, füge weitere Datenbanken hinzu oder ändere die Löschkriterien für alte Backups.

Die Automatisierung der Backups gibt dir die Sicherheit, dass deine Daten immer verfügbar sind und du bei Bedarf schnell handeln kannst. 

Zurück

Wer schreibt hier?

Hi, ich bin Wolfgang.

Seit 2006 tauche ich tief in die faszinierende Welt von TYPO3 ein – es ist nicht nur mein Beruf, sondern auch meine Leidenschaft. Mein Weg führte mich durch unzählige Projekte, und ich habe Hunderte von professionellen Videoanleitungen erstellt, die sich auf TYPO3 und seine Erweiterungen konzentrieren. Ich liebe es, komplexe Themen zu entwirren und in leicht verständliche Konzepte zu verwandeln, was sich auch in meinen Schulungen und Seminaren widerspiegelt.

Als aktives Mitglied im TYPO3 Education Committee setze ich mich dafür ein, dass die Prüfungsfragen für den TYPO3 CMS Certified Integrator stets aktuell und herausfordernd bleiben. Seit Januar 2024 bin ich stolz darauf, offizieller TYPO3 Consultant Partner zu sein!

Meine Leidenschaft endet aber nicht am Bildschirm. Wenn ich nicht gerade in die Tiefen von TYPO3 eintauche, findest du mich oft auf meinem Rad, während ich die malerischen Wege am Bodensee erkunde. Diese Ausflüge ins Freie sind mein perfekter Ausgleich – sie halten meinen Geist frisch und liefern mir immer wieder neue Ideen.

Der TYPO3 Newsletter

TYPO3-Insights direkt in dein Postfach! 
Hol dir monatliche Updates, praktische Tipps und spannende Fallstudien. 
Übersichtlich, zeitsparend, ohne Spam. 
Bist du dabei? Jetzt für den Newsletter anmelden!

Trage dich hier ein, um den Newsletter zu erhalten.