Dabei sind nicht alle Tabellen gleichermaßen wichtig. Häufig enthalten bestimmte Tabellen lediglich temporäre Informationen, Sitzungsdaten, Caches oder Protokolle. Diese Daten können oft problemlos neu erzeugt werden und müssen nicht zwangsläufig in jedem Backup enthalten sein.
In diesem Artikel zeige ich, wie du mit mysqldump gezielt einzelne Tabellen sichern, bestimmte Tabellen ausschließen oder sogar nur ausgewählte Datensätze exportieren kannst.
Warum nicht immer die komplette Datenbank sichern?
Ein vollständiger Dump ist zwar einfach, bringt jedoch einige Nachteile mit sich:
- größere Backup-Dateien
- längere Backup-Zeiten
- längere Wiederherstellungszeiten
- unnötiger Speicherverbrauch
- höhere Last auf dem Datenbankserver
Besonders problematisch sind häufig:
- Session-Tabellen
- Cache-Tabellen
- Logging-Tabellen
- Statistiktabellen
- temporäre Importtabellen
Bei Anwendungen wie Nextcloud, Matomo oder Zammad können diese Tabellen schnell mehrere Gigabyte groß werden.
Alle Tabellen sichern – außer bestimmte Tabellen
Der häufigste Anwendungsfall ist das Ausschließen einzelner Tabellen.
Angenommen, die Datenbank heißt meinedb und die Tabellen logs sowie sessions sollen nicht gesichert werden.
mysqldump -u root -p meinedb \ --ignore-table=meinedb.logs \ --ignore-table=meinedb.sessions \ > backup.sql
Der erzeugte Dump enthält dann sämtliche Tabellen der Datenbank – außer den angegebenen Tabellen.
Backup direkt komprimieren
Bei großen Datenbanken empfiehlt sich die direkte Komprimierung.
mysqldump -u root -p meinedb \ --ignore-table=meinedb.logs \ --ignore-table=meinedb.sessions \ | gzip > backup.sql.gz
Je nach Datenbestand lassen sich dadurch oft 70 bis 90 Prozent Speicherplatz einsparen.
Wiederherstellung:
gunzip < backup.sql.gz | mysql -u root -p meinedb
Viele Tabellen automatisch ausschließen
Wenn mehrere Tabellen ausgeschlossen werden sollen, kann die Liste automatisch erzeugt werden.
mysql -u root -p -N -e "
SELECT CONCAT('--ignore-table=meinedb.', table_name)
FROM information_schema.tables
WHERE table_schema='meinedb'
AND table_name IN ('logs','sessions','cache');
"
Ausgabe:
--ignore-table=meinedb.logs --ignore-table=meinedb.sessions --ignore-table=meinedb.cache
Diese Parameter können anschließend direkt in Backup-Skripten verwendet werden.
Nur die Daten ausschließen – Tabellenstruktur behalten
Manchmal sollen die Tabellen nach einer Wiederherstellung weiterhin vorhanden sein, allerdings ohne die darin enthaltenen Daten.
Ein typisches Beispiel sind Session-, Cache- oder Logtabellen.
Zunächst werden alle anderen Tabellen gesichert:
mysqldump -u root -p meinedb \ --ignore-table=meinedb.logs \ --ignore-table=meinedb.sessions \ > backup.sql
Danach wird nur die Struktur der ausgeschlossenen Tabellen exportiert:
mysqldump -u root -p --no-data meinedb logs sessions \ > excluded_tables_structure.sql
Alternativ lässt sich beides direkt in einer Datei zusammenführen:
(
mysqldump -u root -p meinedb \
--ignore-table=meinedb.logs \
--ignore-table=meinedb.sessions
mysqldump -u root -p --no-data meinedb logs sessions
) > backup.sql
Das Ergebnis:
- alle Daten aller relevanten Tabellen
- nur die Struktur der ausgeschlossenen Tabellen
- deutlich kleinere Backups
Nur eine bestimmte Tabelle sichern
Oft wird lediglich eine einzelne Tabelle benötigt.
Beispielsweise für:
- Tests
- Migrationen
- Fehleranalysen
- Teilimporte
Syntax:
mysqldump -u root -p datenbankname tabellenname > tabellenname.sql
Beispiel:
mysqldump -u root -p zammad tickets > tickets.sql
Mehrere ausgewählte Tabellen sichern
Auch mehrere Tabellen können gezielt exportiert werden.
mysqldump -u root -p datenbankname \ tabelle1 tabelle2 tabelle3 \ > backup.sql
Beispiel:
mysqldump -u root -p zammad \ tickets users organizations \ > zammad_auswahl.sql
Nur die Tabellenstruktur exportieren
Für Entwicklungs- oder Testumgebungen wird häufig nur das Schema benötigt.
mysqldump -u root -p \ --no-data \ datenbankname \ tabellenname \ > struktur.sql
Beispiel:
mysqldump -u root -p \ --no-data \ zammad tickets \ > tickets_structure.sql
Nur die Daten exportieren
Existiert die Tabellenstruktur bereits, können ausschließlich die Datensätze exportiert werden.
mysqldump -u root -p \ --no-create-info \ datenbankname \ tabellenname \ > daten.sql
Beispiel:
mysqldump -u root -p \ --no-create-info \ zammad tickets \ > tickets_data.sql
Nur bestimmte Datensätze sichern
Mit der Option --where können Datensätze gefiltert werden.
Beispiel:
mysqldump -u root -p zammad tickets \ --where="id > 100000" \ > teilbackup.sql
Oder nur Tickets aus dem Jahr 2026:
mysqldump -u root -p zammad tickets \ --where="created_at >= '2026-01-01'" \ > tickets_2026.sql
Dies eignet sich hervorragend für Archivierungs- und Analysezwecke.
Tabelle wiederherstellen
In eine bestehende Datenbank:
mysql -u root -p datenbankname < tabellenname.sql
Falls die Datenbank noch nicht existiert:
mysql -u root -p -e "CREATE DATABASE datenbankname;" mysql -u root -p datenbankname < tabellenname.sql
Alle Tabellen einer Datenbank anzeigen
Wenn der genaue Tabellenname unbekannt ist:
mysql -u root -p -e "SHOW TABLES FROM datenbankname;"
Oder nach dem Login:
USE datenbankname; SHOW TABLES;
Die größten Tabellen einer Datenbank finden
Vor der Sicherung lohnt sich oft ein Blick auf die größten Speicherverbraucher.
SELECT
table_name,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'datenbankname'
ORDER BY (data_length + index_length) DESC;
Die Ausgabe zeigt die Tabellen nach ihrer tatsächlichen Größe sortiert.
So lässt sich schnell erkennen:
- welche Tabellen den meisten Speicherplatz belegen
- welche Tabellen eventuell ausgeschlossen werden können
- wo Optimierungspotenzial besteht
mysqldump bietet zahlreiche Möglichkeiten, Backups gezielt auf die tatsächlich benötigten Daten zu beschränken. Besonders bei großen Anwendungen wie Zammad, Nextcloud, Matomo oder umfangreichen Webplattformen können durch das Ausschließen von Log-, Cache- oder Session-Tabellen erhebliche Mengen an Speicherplatz und Zeit eingespart werden.
Wer regelmäßig Datenbanken sichert, sollte daher nicht nur komplette Dumps erstellen, sondern die Struktur seiner Datenbank kennen und gezielt entscheiden, welche Tabellen wirklich gesichert werden müssen. Das reduziert Backup-Größe, Wiederherstellungszeit und Systemlast erheblich.