Shared Hosting — Warum sieht mein Backup-Tool nicht alle Datenbanken?
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 DATABASESfunktioniert 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:
- Schnellster Weg: Datenbanknamen manuell in der MySQLDumper-Konfiguration eintragen
- Sauberster Weg: Separate MySQLDumper-Instanz pro Datenbank
- Nachfragen: Hoster um
SHOW DATABASES-Privileg bitten - 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.