Wie man MySQL-Datenbanken über die Befehlszeile unter Linux auflistet
Das Auflisten aller MySQL-Datenbanken über die Befehlszeile erfolgt mit einer einzigen SQL-Anweisung — SHOW DATABASES; — die nach der Authentifizierung beim MySQL-Server mithilfe des mysql-Clients ausgeführt wird. Dies funktioniert auf jeder Linux-Distribution, die MySQL 5.7, MySQL 8.x oder einen kompatiblen MariaDB-Server betreibt, und erfordert entweder das SHOW DATABASES-Privileg oder Superuser-Zugriff.
Diese Anleitung geht über den grundlegenden Befehl hinaus. Sie behandelt Authentifizierungsoptionen, privilegienbasierte Sichtbarkeit, nicht-interaktive Scripting-Muster, Performance-Schema-Filterung und häufige Fehlerquellen, die selbst erfahrene Administratoren stolpern lassen.
Voraussetzungen
Bestätigen Sie vor dem Fortfahren Folgendes:
- MySQL Server oder MariaDB ist installiert und der Dienst ist aktiv.
- Sie verfügen über ein Benutzerkonto mit mindestens dem
SHOW DATABASES-Privileg, oder Sie authentifizieren sich alsroot. - Das
mysql-Client-Binary ist in derPATHIhrer Shell verfügbar (überprüfen Sie dies mitwhich mysql).
Wenn Sie einen Remote-Server verwalten — zum Beispiel eine VPS Hosting-Umgebung — stellen Sie außerdem sicher, dass der MySQL-Port (Standard 3306) erreichbar ist oder dass Sie sich über SSH verbinden.
Schritt 1: Überprüfen Sie, ob der MySQL-Dienst läuft
Bestätigen Sie vor dem Verbindungsversuch, dass der Daemon aktiv ist:
sudo systemctl status mysqlBei MariaDB-Installationen unterscheidet sich der Dienstname:
sudo systemctl status mariadbWenn der Dienst gestoppt ist, starten Sie ihn:
sudo systemctl start mysqlEin fehlgeschlagener Start wird fast immer in journalctl -xe oder in /var/log/mysql/error.log erklärt. Überprüfen Sie diese Dateien zuerst, bevor Sie ein Konfigurationsproblem annehmen.
Schritt 2: Authentifizierung beim MySQL-Server
Standard-Interaktiver Login
mysql -u root -p-u root— gibt den MySQL-Benutzernamen an. Ersetzen Sierootdurch ein beliebiges gültiges Konto.-p— fordert das Passwort interaktiv an. Übergeben Sie das Passwort niemals direkt in der Befehlszeile in der Produktion (z. B.-pMyPassword), da es in Prozesslisten und der Shell-Historie sichtbar ist.
Nach Eingabe eines korrekten Passworts erscheint die MySQL-Eingabeaufforderung:
mysql>Verbindung zu einem Remote-Host oder Nicht-Standard-Port
mysql -u root -p -h 192.168.1.100 -P 3307-h— gibt die IP-Adresse oder den Hostnamen des Remote-Hosts an.-P— gibt eine nicht standardmäßige Portnummer an.
Verwendung einer Optionsdatei für die Automatisierung
Für Skripte und Cron-Jobs speichern Sie Anmeldedaten in einer geschützten Optionsdatei, anstatt sie in den Befehl einzubetten:
# ~/.my.cnf
[client]
user=root
password=YourSecurePasswordSchränken Sie die Berechtigungen unmittelbar nach der Erstellung der Datei ein:
chmod 600 ~/.my.cnfMit dieser Datei authentifiziert sich mysql ohne jegliche Flags:
mysqlSchritt 3: Alle Datenbanken auflisten
Führen Sie innerhalb der MySQL-Shell folgenden Befehl aus:
SHOW DATABASES;Beispielausgabe bei einer frisch installierten MySQL 8-Instanz:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)Diese vier System-Schemas sind bei jeder Standard-MySQL-Installation vorhanden:
| Schema | Zweck |
|---|---|
| — | — |
| `information_schema` | Schreibgeschütztes virtuelles Schema, das Metadaten über alle anderen Schemas, Tabellen, Spalten und Privilegien bereitstellt |
| `mysql` | Kern-Grant-Tabellen, Zeitzonendaten und Serverkonfiguration |
| `performance_schema` | Low-Level-Instrumentierungsdaten für Query-Profiling und Diagnose |
| `sys` | Menschenlesbare Ansichten, die auf `performance_schema` aufgebaut sind |
Benutzererstellte Datenbanken erscheinen neben diesen System-Schemas.
Schritt 4: Die Datenbankliste filtern
Nach Namensmuster filtern
SHOW DATABASES akzeptiert eine LIKE-Klausel, die nützlich ist, wenn ein Server Dutzende von Datenbanken hostet:
SHOW DATABASES LIKE 'wp_%';Dies gibt nur Datenbanken zurück, deren Namen mit wp_ beginnen — eine gängige Namenskonvention für WordPress-Installationen.
information_schema für erweiterte Filterung abfragen
Für präzisere Filterung fragen Sie die information_schema.SCHEMATA-Tabelle direkt ab:
SELECT schema_name, default_character_set_name, default_collation_name
FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
ORDER BY schema_name;Dieser Ansatz ermöglicht es Ihnen, nach Zeichensatz, Kollation oder einer anderen Metadatenspalte zu filtern — etwas, das SHOW DATABASES nicht kann.
Schritt 5: Eine bestimmte Datenbank untersuchen
Um den Inhalt einer bestimmten Datenbank zu untersuchen, wechseln Sie den Kontext mit USE und listen Sie dann deren Tabellen auf:
USE database_name;
SHOW TABLES;Um Tabellengrößen, Zeilenanzahlen und Speicher-Engines in einer Abfrage zu sehen:
SELECT
table_name,
engine,
table_rows,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.TABLES
WHERE table_schema = 'database_name'
ORDER BY (data_length + index_length) DESC;Dies ist weitaus aussagekräftiger als SHOW TABLES allein und ist die Art von Abfrage, die ein DBA vor der Planung einer Migration oder Backup-Strategie ausführt.
Schritt 6: Die MySQL-Shell beenden
EXIT;Oder verwenden Sie die Tastenkombination Ctrl+D.
Nicht-interaktive Nutzung: Datenbanken aus der Shell auflisten
In automatisierten Pipelines — Backup-Skripte, Monitoring-Agenten, Deployment-Hooks — müssen Sie die Datenbankliste abrufen, ohne eine interaktive Sitzung zu starten.
Einzeiler mit dem -e-Flag
mysql -u root -p -e "SHOW DATABASES;"Kopfzeile für Scripting unterdrücken
mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/nullDas --skip-column-names-Flag entfernt den Database-Header und erzeugt eine saubere Ausgabe, die für die Iteration in einer Shell-Schleife geeignet ist:
for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
echo "Processing: $db"
donemysqlshow als Alternative verwenden
Das mysqlshow-Dienstprogramm bietet einen schnellen Überblick, ohne die MySQL-Shell zu betreten:
mysqlshow -u root -pEs listet alle Datenbanken auf, die der authentifizierte Benutzer sehen kann, und akzeptiert ein Datenbankname-Argument, um in die Tabellenebene zu wechseln:
mysqlshow -u root -p database_namePrivilegien-Scoping: Warum einige Datenbanken ausgeblendet sind
Dies ist eines der am häufigsten missverstandenen Verhaltensweisen in MySQL. Wenn einem Benutzer das globale SHOW DATABASES-Privileg fehlt, gibt SHOW DATABASES nur Datenbanken zurück, für die dieser Benutzer mindestens ein Privileg besitzt. Dies ist beabsichtigt — es ist eine Sicherheitsgrenze, kein Fehler.
Praktische Auswirkung: Ein eingeschränkter Anwendungsbenutzer kann SHOW DATABASES; ausführen und nur eine oder zwei Datenbanken sehen, obwohl der Server fünfzig hostet. Dies ist korrektes Verhalten. Wenn ein Benutzer die vollständige Liste sehen muss, gewähren Sie das Privileg explizit:
GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;Verwenden Sie diese Gewährung sparsam. In Multi-Tenant-Umgebungen — wie einem Shared Web Hosting-Setup oder einer Multi-Client-Dedicated Servers-Bereitstellung — ist die Offenlegung der vollständigen Datenbankliste gegenüber Anwendungsbenutzern ein Sicherheitsrisiko.
MySQL vs. MariaDB: Verhaltensunterschiede
Sowohl MySQL als auch MariaDB unterstützen SHOW DATABASES; und information_schema.SCHEMATA, aber es gibt subtile Unterschiede, die es wert sind, bekannt zu sein:
| Funktion | MySQL 8.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| `SHOW DATABASES`-Syntax | Unterstützt | Unterstützt |
| `information_schema.SCHEMATA` | Verfügbar | Verfügbar |
| `performance_schema`-Standard | Aktiviert | Aktiviert (10.5+) |
| `sys`-Schema | Standardmäßig enthalten | Optional, nicht immer vorhanden |
| `SHOW DATABASES LIKE` | Unterstützt | Unterstützt |
| Rollenbasiertes Privilegienmodell | Nativ (8.0+) | Nativ (10.0.5+) |
| `mysql`-Client-Binary | `mysql` | `mysql` oder `mariadb` |
Bei neueren MariaDB-Installationen kann das kanonische Binary mariadb anstelle von mysql sein, obwohl ein Symlink typischerweise die Abwärtskompatibilität gewährleistet.
Häufige Fehler und deren Behebung
ERROR 1045 (28000): Access denied for user
Dies bedeutet, dass die Authentifizierung fehlgeschlagen ist. Überprüfen Sie Benutzername, Passwort und Host. Für root unter MySQL 8 ist das Standard-Authentifizierungs-Plugin caching_sha2_password. Wenn Ihr Client es nicht unterstützt, verbinden Sie sich über Socket:
sudo mysql -u rootDies umgeht die Passwort-Authentifizierung, wenn Sie als Linux-root-Benutzer ausgeführt werden, und verlässt sich stattdessen auf das auth_socket– oder unix_socket-Plugin.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
Der MySQL-Daemon läuft nicht, oder der Socket-Dateipfad ist falsch. Überprüfen Sie:
sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sockERROR 1044 (42000): Access denied for user to database
Der Benutzer ist authentifiziert, verfügt jedoch nicht über Privilegien für die Zieldatenbank. Überprüfen Sie die Grants mit:
SHOW GRANTS FOR 'username'@'host';Praktische Entscheidungsmatrix
Verwenden Sie diese Referenz, um den richtigen Ansatz für Ihre Situation auszuwählen:
| Szenario | Empfohlener Befehl |
|---|---|
| — | — |
| Interaktive Erkundung | `SHOW DATABASES;` innerhalb der `mysql`-Shell |
| Nach Namenspräfix filtern | `SHOW DATABASES LIKE 'prefix_%';` |
| Metadatenreiche Auflistung | `information_schema.SCHEMATA` abfragen |
| Shell-Scripting / Automatisierung | `mysql -e "SHOW DATABASES;" –skip-column-names` |
| Schneller Überblick ohne Shell | `mysqlshow -u root -p` |
| Remote-Server, Nicht-Standard-Port | `mysql -u root -p -h host -P port` |
| Passwortlose Automatisierung | `~/.my.cnf`-Optionsdatei mit `chmod 600` |
| Debugging von Zugriffsproblemen | `SHOW GRANTS FOR 'user'@'host';` |
Wichtige technische Erkenntnisse
SHOW DATABASES;ist privilegienbasiert. Ein Benutzer ohne globalesSHOW DATABASES-Privileg sieht nur Datenbanken, auf die er expliziten Zugriff hat — dies ist eine Sicherheitsfunktion, keine Fehlkonfiguration.- Übergeben Sie Passwörter niemals als Befehlszeilenargumente in der Produktion. Verwenden Sie
-pfür interaktive Sitzungen und~/.my.cnffür die Automatisierung. information_schema.SCHEMATAist für geskriptete oder gefilterte Abfragen grundsätzlich leistungsfähiger alsSHOW DATABASES.- Das
mysqlshow-Dienstprogramm wird zu wenig genutzt und bietet eine schnelle, nicht-interaktive Datenbank- und Tabelleninspektion. - Unter MySQL 8 ist die Socket-basierte Authentifizierung (
sudo mysql) oft der schnellste Weg zum Root-Zugriff auf einem lokalen Server. - Bei der Verwaltung mehrerer Datenbanken auf einem VPS mit cPanel oder einem anderen Control Panel ist der Datenbankmanager des Panels eine GUI-Hülle um dieselben SQL-Befehle — das Verständnis der zugrunde liegenden Abfragen gibt Ihnen die volle Kontrolle, wenn die GUI nicht ausreicht.
- Für Umgebungen, in denen der Datenbankzugriff an SSL Certificates und verschlüsselte Verbindungen gebunden ist, fügen Sie
--ssl-mode=REQUIREDzu Ihrenmysql-Client-Aufrufen hinzu, um TLS während der Übertragung zu erzwingen.
FAQ
F: Warum zeigt SHOW DATABASES nicht alle Datenbanken auf meinem Server an?
A: Das Benutzerkonto, mit dem Sie authentifiziert sind, verfügt nicht über das globale SHOW DATABASES-Privileg. MySQL gibt nur Datenbanken zurück, für die dieser Benutzer mindestens ein Privileg besitzt. Authentifizieren Sie sich als root oder gewähren Sie das SHOW DATABASES-Privileg, um die vollständige Liste zu sehen.
F: Was ist der Unterschied zwischen SHOW DATABASES und der Abfrage von information_schema.SCHEMATA?
A: Beide geben die Liste der zugänglichen Schemas zurück, aber information_schema.SCHEMATA stellt zusätzliche Metadatenspalten bereit — Standard-Zeichensatz, Standard-Kollation — und unterstützt vollständige SQL-Filterung mit WHERE, ORDER BY und JOIN. Verwenden Sie SHOW DATABASES für schnelle interaktive Überprüfungen und information_schema.SCHEMATA für geskriptete oder analytische Abfragen.
F: Wie liste ich Datenbanken auf einem Remote-MySQL-Server auf, ohne eine interaktive Sitzung zu öffnen?
A: Verwenden Sie das -e-Flag in Kombination mit Host- und Port-Optionen:
mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-namesF: Kann ich MySQL-Datenbanken auflisten, ohne das Root-Passwort zu kennen?
A: Auf einem lokalen Server, auf dem Sie Linux-root-Zugriff haben, ja. Das auth_socket-Plugin von MySQL (oder unix_socket bei MariaDB) authentifiziert basierend auf dem Linux-OS-Benutzer. Führen Sie sudo mysql aus und Sie erhalten Zugriff als MySQL-root-Benutzer ohne Passwortabfrage.
F: Funktioniert SHOW DATABASES bei MariaDB genauso wie bei MySQL?
A: Die Syntax ist identisch und die Privilegien-Scoping-Regeln sind dieselben. Der primäre praktische Unterschied besteht darin, dass MariaDB das sys-Schema möglicherweise nicht standardmäßig enthält, und bei neueren MariaDB-Versionen ist das bevorzugte Client-Binary mariadb anstelle von mysql, obwohl der mysql-Alias typischerweise für die Kompatibilität erhalten bleibt.
