Shared Hosting — Warum sieht mein Backup-Tool nicht alle Datenbanken?

Datenbank-Rechte auf Shared Hosting korrekt einrichten

Du installierst MySQLDumper auf deinem Shared-Hosting-Server und erwartest, deine drei Datenbanken zu sehen. Stattdessen zeigt das Tool nur eine — oder gar keine. Du weißt, dass die Datenbanken existieren, denn in phpMyAdmin tauchen sie auf. Was läuft schief?

Wie MySQL-Berechtigungen auf Shared Hosting funktionieren

Auf einem Shared-Hosting-Server teilen sich hunderte Kunden einen MySQL-Server. Damit Kunde A nicht die Datenbanken von Kunde B sehen (oder schlimmer: löschen) kann, schränken Hosting-Provider die Berechtigungen stark ein.

Jeder MySQL-Benutzer bekommt nur Zugriff auf seine eigenen Datenbanken. Aber — und das ist der entscheidende Punkt — das allein reicht nicht. Der Benutzer braucht zusätzlich das SHOW DATABASES-Privileg, um die Liste der verfügbaren Datenbanken abzurufen.

Das SHOW DATABASES Privileg

-- Prüfen, welche Rechte dein User hat:
SHOW GRANTS FOR CURRENT_USER();

-- Typische Ausgabe auf Shared Hosting:
GRANT USAGE ON *.* TO 'usr_web123'@'localhost'
GRANT ALL PRIVILEGES ON `usr_web123_shop`.* TO 'usr_web123'@'localhost'
GRANT ALL PRIVILEGES ON `usr_web123_blog`.* TO 'usr_web123'@'localhost'

Siehst du das Problem? Der User hat GRANT USAGE ON *.* — das bedeutet: keine globalen Rechte. Er hat volle Rechte auf zwei Datenbanken, aber kein SHOW DATABASES-Privileg auf globaler Ebene.

Wenn dein Backup-Tool SHOW DATABASES ausführt, gibt MySQL eine leere Liste zurück — obwohl der User auf die Datenbanken zugreifen kann, wenn er den Namen kennt.

Die skip-show-database Server-Variable

Viele Hosting-Provider setzen zusätzlich die Server-Variable skip-show-database in der MySQL-Konfiguration. Damit darf SHOW DATABASES nur von Usern mit dem gleichnamigen globalen Privileg ausgeführt werden. Alle anderen sehen nichts — egal welche Datenbank-Rechte sie haben.

-- Prüfen ob skip-show-database aktiv ist:
SHOW VARIABLES LIKE 'skip_show_database';

-- Ergebnis auf restriktiven Servern:
-- skip_show_database | ON

MySQLDumper für mehrere Datenbanken konfigurieren

MySQLDumper versucht beim Start, die verfügbaren Datenbanken über SHOW DATABASES aufzulisten. Wenn das nicht funktioniert, musst du die Datenbanken manuell eintragen. Grundlagen zur MySQLDumper-Installation findest du im separaten Guide.

Datenbanken in der Konfiguration hinterlegen

In der MySQLDumper-Konfigurationsdatei kannst du die Datenbanken direkt angeben. So umgehst du das SHOW DATABASES-Problem:

// In der MySQLDumper-Konfiguration:
$config['dbname'] = 'usr_web123_shop';

// Für mehrere Datenbanken:
// Konfigurationsprofile anlegen (je eines pro Datenbank)

MySQLDumper unterstützt mehrere Konfigurationsprofile. Du legst für jede Datenbank ein eigenes Profil an und wechselst im Interface zwischen ihnen. So kannst du alle Datenbanken sichern, auch wenn SHOW DATABASES nicht funktioniert.

Workaround: INFORMATION_SCHEMA abfragen

Manche MySQL-Server erlauben den Zugriff auf INFORMATION_SCHEMA, auch wenn SHOW DATABASES blockiert ist:

-- Alternative zu SHOW DATABASES:
SELECT SCHEMA_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME LIKE 'usr_web123_%';

-- Tabellen einer bestimmten Datenbank auflisten:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'usr_web123_shop';

Das funktioniert auf vielen Servern, weil der Zugriff auf INFORMATION_SCHEMA nur die Objekte zeigt, auf die der User tatsächlich Rechte hat.

Workaround: Mehrere MySQLDumper-Installationen

Wenn die manuelle Konfiguration nicht ausreicht oder du eine saubere Trennung willst, kannst du mehrere MySQLDumper-Instanzen installieren:

/httpdocs/
  /mysqldumper_shop/     → Datenbank: usr_web123_shop
  /mysqldumper_blog/     → Datenbank: usr_web123_blog
  /mysqldumper_forum/    → Datenbank: usr_web123_forum

Jede Instanz hat ihre eigene Konfiguration und sichert genau eine Datenbank. Das ist zwar redundant, aber auf Shared Hosting oft der zuverlässigste Weg.

Vorteil dieser Lösung

  • Jede Instanz hat eigene Backup-Zeitpläne
  • Kein Risiko, dass ein Fehler in einer Datenbank den Backup-Prozess für alle anderen blockiert
  • Unabhängige Log-Dateien für Debugging

Nachteil

  • Mehrfacher Speicherverbrauch auf dem Server
  • Mehrere Interfaces zu pflegen
  • Updates müssen für jede Instanz separat eingespielt werden

Was der Hoster machen kann (aber selten tut)

Wenn du beim Support deines Hosters nachfragst, kannst du folgendes beantragen:

-- Der Hoster kann dir SHOW DATABASES eingeschränkt gewähren:
GRANT SHOW DATABASES ON *.* TO 'usr_web123'@'localhost';

-- Oder besser (MySQL 8.0+): Nur bestimmte Datenbanken sichtbar machen:
-- Das geht leider nicht granular — SHOW DATABASES ist ein globales Privileg

Die meisten Hoster werden die Anfrage ablehnen, weil SHOW DATABASES ein globales Privileg ist und sie es aus Sicherheitsgründen nicht vergeben. Einen Versuch ist es trotzdem wert.

Wann ein VPS sinnvoll wird

Wenn du regelmäßig mit mehreren Datenbanken arbeitest und volle Kontrolle brauchst, ist ein Managed VPS oft die bessere Wahl. Ab 10-15 Euro pro Monat bekommst du:

  • Eigenen MySQL-Server mit Root-Zugang
  • SHOW DATABASES funktioniert uneingeschränkt
  • Eigene MySQL-User mit beliebigen Rechten
  • Zugang zur MySQL-Konfiguration (my.cnf)
  • Cron-Jobs für automatisierte Backups per mysqldump

Die Grenze ist erreicht, wenn du mehr als 3-4 Datenbanken verwaltest oder spezielle MySQL-Konfigurationen brauchst (z.B. für Performance-Tuning, Replikation oder spezielle sql_mode-Einstellungen).

MySQL-Berechtigungen verstehen: GRANT im Detail

Zum Hintergrund — so sieht ein voll ausgestatteter MySQL-User aus (den du auf einem VPS selbst anlegen kannst):

-- User anlegen (MySQL 8.0+)
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'sicheres_passwort';

-- Volle Rechte auf eine Datenbank
GRANT ALL PRIVILEGES ON mein_shop.* TO 'backup_user'@'localhost';

-- Nur Lese-Rechte für Backups (empfohlen)
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, PROCESS
  ON mein_shop.* TO 'backup_user'@'localhost';

-- SHOW DATABASES erlauben
GRANT SHOW DATABASES ON *.* TO 'backup_user'@'localhost';

-- Rechte aktivieren
FLUSH PRIVILEGES;

-- Alle Rechte eines Users anzeigen
SHOW GRANTS FOR 'backup_user'@'localhost';

Minimale Rechte für Backups

Privileg Wofür benötigt
SELECT Daten lesen (Kern-Backup)
SHOW VIEW View-Definitionen exportieren
TRIGGER Trigger-Definitionen exportieren
LOCK TABLES Konsistente Backups (MyISAM)
EVENT Scheduled Events exportieren
PROCESS Laufende Queries sehen (optional)
SHOW DATABASES Datenbanken auflisten

Zusammenfassung

Auf Shared Hosting ist das Fehlen von Datenbanken im Backup-Tool kein Bug, sondern ein Feature des Hosters. Die Lösung hängt von deiner Situation ab:

  1. Schnellster Weg: Datenbanknamen manuell in der MySQLDumper-Konfiguration eintragen
  2. Sauberster Weg: Separate MySQLDumper-Instanz pro Datenbank
  3. Nachfragen: Hoster um SHOW DATABASES-Privileg bitten
  4. Langfristig: VPS in Betracht ziehen, wenn du mehr Kontrolle brauchst

Mehr zum Thema Datenbank-Backups auf verschiedenen Hosting-Umgebungen findest du im Artikel MySQL-Datenbank sichern.