Mit mysqldump lassen sich MySQL- und MariaDB-Datenbanken direkt im Terminal sichern. Die erzeugte SQL-Datei enthält Tabellenstrukturen und Daten und kann bei Bedarf mit dem MySQL-Client wieder eingespielt werden. Diese Anleitung zeigt die wichtigsten Befehle für einzelne Datenbanken, mehrere Datenbanken und automatisierte Backups.
Inhalt
Voraussetzungen
- SSH-Zugang zum Server
- ein MySQL- oder MariaDB-Benutzer mit den erforderlichen Rechten
- ausreichend freier Speicherplatz für die Sicherungsdatei
Wichtig: Geben Sie das Datenbankpasswort nicht direkt in der Befehlszeile an. Verwenden Sie nur -p; der Client fragt das Passwort anschließend verdeckt ab. So erscheint es weder in der Shell-Historie noch in der Prozessliste.
Eine MySQL-Datenbank sichern
Die allgemeine Syntax für eine einzelne Datenbank lautet:
mysqldump -u BENUTZER -p DATENBANK > backup.sql
Beispiel für die Datenbank wordpress:
mysqldump -u adminer -p wordpress > wordpress.sql
Für InnoDB-Datenbanken empfiehlt sich --single-transaction. Dadurch entsteht in der Regel ein konsistentes Backup, ohne die Tabellen während der gesamten Sicherung zu sperren:
mysqldump --single-transaction --routines --triggers -u adminer -p wordpress > wordpress.sql
Mit --routines werden gespeicherte Prozeduren und Funktionen einbezogen. Trigger sichert mysqldump normalerweise standardmäßig; die ausdrückliche Angabe macht die Absicht jedoch deutlich.
Backup komprimieren
Größere SQL-Dateien können direkt während der Sicherung mit gzip komprimiert werden:
mysqldump --single-transaction -u adminer -p wordpress | gzip > wordpress.sql.gz
Datenbank auf einem entfernten Server sichern
Wenn der MySQL-Server Netzwerkverbindungen erlaubt, geben Sie den Host mit -h und optional den Port mit -P an:
mysqldump -h mysql-01.example.net -P 3306 -u adminer -p wordpress > wordpress.sql
Der Datenbankport sollte nicht unnötig öffentlich erreichbar sein. Sicherer ist meist, sich per SSH auf dem Server anzumelden und mysqldump dort auszuführen oder einen SSH-Tunnel zu verwenden.
Mehrere oder alle Datenbanken sichern
Mehrere Datenbanken werden mit --databases angegeben:
mysqldump -u adminer -p --databases wordpress shop > datenbanken.sql
Alle Datenbanken eines Servers sichern Sie mit:
mysqldump -u adminer -p --all-databases > alle-datenbanken.sql
Für eine vollständige Sicherung sollten Sie prüfen, ob der verwendete Benutzer die benötigten Rechte für alle Datenbanken, Views, Trigger, Events und Routinen besitzt.
Nur Struktur oder nur Daten sichern
Nur die Tabellenstruktur ohne Datensätze:
mysqldump -u adminer -p --no-data wordpress > wordpress-struktur.sql
Nur die Daten ohne Anweisungen zum Erstellen der Tabellen:
mysqldump -u adminer -p --no-create-info wordpress > wordpress-daten.sql
Einzelne Tabellen sichern
Tabellennamen werden nach dem Datenbanknamen aufgeführt. Das folgende Beispiel sichert die Tabellen wp_posts und wp_postmeta:
mysqldump -u adminer -p wordpress wp_posts wp_postmeta > wordpress-tabellen.sql
MySQL-Datenbank wiederherstellen
Die Zieldatenbank muss bereits existieren. Falls sie noch nicht vorhanden ist, erstellen Sie sie zunächst mit einem Benutzer, der dafür ausreichende Rechte besitzt:
mysql -u adminer -p -e "CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
Danach importieren Sie die SQL-Datei:
mysql -u adminer -p wordpress < wordpress.sql
Ein komprimiertes Backup kann ohne vorheriges Entpacken wiederhergestellt werden:
gunzip -c wordpress.sql.gz | mysql -u adminer -p wordpress
Achtung: Ein Import kann vorhandene Tabellen und Daten überschreiben. Prüfen Sie deshalb Datenbankname, Sicherungsdatei und Zielsystem sorgfältig. Erstellen Sie vor einer Wiederherstellung möglichst ein aktuelles Backup.
Automatisiertes Backup per Bash-Skript
Das folgende Skript legt für jede Datenbank eine eigene, komprimierte Datei in einem datumsbasierten Ordner ab. Vorhandene Sicherungen werden nicht automatisch gelöscht. Systemdatenbanken werden übersprungen.
#!/usr/bin/env bash
set -euo pipefail
BACKUP_ROOT="/var/backups/mysql"
BACKUP_DIR="$BACKUP_ROOT/$(date +%Y-%m-%d_%H-%M-%S)"
MYSQL_USER="backup"
mkdir -p "$BACKUP_DIR"
mysql -u "$MYSQL_USER" -p -N -e "SHOW DATABASES" |
while IFS= read -r database; do
case "$database" in
information_schema|performance_schema|mysql|sys)
continue
;;
esac
mysqldump --single-transaction --routines --triggers -u "$MYSQL_USER" -p "$database" |
gzip > "$BACKUP_DIR/$database.sql.gz"
done
echo "Backup gespeichert in: $BACKUP_DIR"
Dieses einfache Beispiel fragt das Passwort bei jedem Aufruf erneut ab und eignet sich daher vor allem für manuelle Tests. Für zeitgesteuerte Backups per Cron sollten Zugangsdaten nicht im Skript stehen. Verwenden Sie stattdessen beispielsweise mysql_config_editor, eine restriktiv geschützte MySQL-Konfigurationsdatei oder die sichere Geheimnisverwaltung Ihrer Hosting-Umgebung.
Backup prüfen
Ein Backup ist erst dann zuverlässig, wenn sich seine Wiederherstellung nachweisen lässt. Prüfen Sie daher regelmäßig:
- ob die Sicherungsdateien vorhanden und größer als null Byte sind,
- ob die Protokolle keine Fehler enthalten,
- ob eine Wiederherstellung in einer getrennten Testdatenbank funktioniert,
- ob Aufbewahrungsdauer, Verschlüsselung und externer Speicherort zum eigenen Sicherheitskonzept passen.
Bewahren Sie mindestens eine Sicherung außerhalb des produktiven Servers auf. So bleibt das Backup auch bei einem Serverausfall, Schadsoftwarebefall oder versehentlichem Löschen verfügbar.




