Self-Hosted Datenbanken

MySQL/MariaDB: Einzelne Tabellen sichern oder vom Backup ausschließen

Datenbanksicherungen gehören zu den wichtigsten Aufgaben eines Administrators. Gerade bei großen Anwendungen wie Zammad, Nextcloud, Matomo, WordPress oder eigenen Webanwendungen wachsen Datenbanken oft auf mehrere Gigabyte oder sogar Terabyte an.

4 min Lesezeit
Grafik: MySQL mysqldump: Tabellen gezielt sichern

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.