Artikel

Automatisierte MySQL-Dumps mit Bash & PHP

MySQLPHPSicherheit

Backups sind essenziell für jede Datenbank. Ein MySQL-Dump sichert deine Daten und kann bei einem Fehler oder einem Systemcrash zur Wiederherstellung genutzt werden.

In diesem Artikel zeige ich dir, wie du ein Bash-Skript für MySQL-Dumps erstellst, das:

  • eine .env Datei für Konfigurationswerte nutzt,
  • sowohl manuell als auch über PHP (exec()) gestartet werden kann,
  • automatisch Prüfungen auf Dateiexistenz und Inhalt durchführt.

📂 1️⃣ .env_example – Konfigurationsdatei

Erstelle eine .env_example Datei als Vorlage für deine Datenbank-Zugangsdaten.

# MySQL Konfiguration
DBHOST=localhost
DBUSER=root
DBPASSWORD=meinPasswort
DBNAME=mydatabase

🔹 Speichere sie als .env_dev für deine Entwicklungsumgebung.
Falls du mehrere Umgebungen hast, kannst du .env_prod für Produktion erstellen.


🐧 2️⃣ dump.sh – Das Bash-Skript für MySQL-Dumps

Speichere dieses Skript als dump.sh.

#!/bin/bash

# Absoluter Pfad des Skripts ermitteln
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
OUTPUT_DIR="$SCRIPT_DIR/."
ENV_FILE="$SCRIPT_DIR/.env_dev"

# Prüfe, ob die .env Datei existiert
if [[ ! -f "$ENV_FILE" ]]; then
    echo -e "\e[31mFehler: Die Datei .env_dev wurde nicht gefunden.\e[0m"
    exit 1
fi

# .env Datei einbinden
source "$ENV_FILE"

# Prüfen, ob Variablen korrekt geladen wurden
if [[ -z "$DBHOST" || -z "$DBUSER" || -z "$DBPASSWORD" || -z "$DBNAME" || -z "$OUTPUT_DIR" ]]; then
    echo "❌ Fehler: Eine oder mehrere Umgebungsvariablen fehlen!"
    exit 1
fi

# Sicherstellen, dass das Backup-Verzeichnis existiert
mkdir -p "$OUTPUT_DIR"

# Funktion zur Dateiüberprüfung
check_file() {
    local file_path="$1"
    local file_type="$2"

    if [[ ! -f "$file_path" ]]; then
        echo "❌ Fehler: $file_type-Datei fehlt -> $file_path"
        return 1
    elif [[ ! -s "$file_path" ]]; then
        echo "⚠️ Warnung: $file_type-Datei ist leer -> $file_path"
        return 2
    else
        echo "✅ $file_type erfolgreich exportiert -> $file_path"
    fi
}

# MySQL Dump erstellen
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
DUMP_FILE="$OUTPUT_DIR/${DBNAME}_$TIMESTAMP.sql"

echo "🚀 Starte Dump für $DBNAME ..."
mysqldump -h"$DBHOST" -u"$DBUSER" -p"$DBPASSWORD" --databases "$DBNAME" > "$DUMP_FILE"

# Datei prüfen
check_file "$DUMP_FILE"

echo "✅ Dump abgeschlossen!"
exit 0


🐘 3️⃣ run_dump.php – PHP-Skript zum Aufruf

Speichere diese Datei als run_dump.php im selben Verzeichnis wie dump.sh.

<?php
// Verzeichnis des Bash-Skripts ermitteln
$scriptPath = __DIR__ . "/dump.sh";

// Prüfen, ob das Skript existiert
if (!file_exists($scriptPath)) {
    die("❌ Fehler: Das Dump-Skript wurde nicht gefunden!\n");
}

// Bash-Skript ausführen und Ausgabe erfassen
exec("bash $scriptPath 2>&1", $output, $returnVar);

// Ausgabe anzeigen
echo implode("\n", $output) . "\n";

// Fehlerprüfung
if ($returnVar !== 0) {
    die("❌ Fehler: Dump fehlgeschlagen!\n");
}

echo "✅ Dump erfolgreich abgeschlossen!\n";
?>


🎯 4️⃣ So verwendest du es

🐧 Manuell über die Konsole:

chmod +x dump.sh  # Einmalig ausführen, um es ausführbar zu machen
./dump.sh

🐘 Über PHP (exec())

php run_dump.php

0 Kommentare