Artikel
Automatisierte MySQL-Dumps mit Bash & PHP
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
.envDatei 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