Jak wyświetlić listę baz danych MySQL za pomocą wiersza poleceń w Linux
Wylistowanie wszystkich baz danych MySQL z wiersza poleceń odbywa się za pomocą jednej instrukcji SQL — SHOW DATABASES; — wykonywanej po uwierzytelnieniu się na serwerze MySQL przy użyciu klienta mysql. Działa to na każdej dystrybucji Linux z uruchomionym MySQL 5.7, MySQL 8.x lub kompatybilnym serwerem MariaDB i wymaga uprawnienia SHOW DATABASES lub dostępu superużytkownika.
Ten przewodnik wykracza poza podstawowe polecenie. Obejmuje opcje uwierzytelniania, widoczność w zakresie uprawnień, wzorce skryptowania nieinteraktywnego, filtrowanie schematu wydajności oraz typowe błędy, które sprawiają trudności nawet doświadczonym administratorom.
Wymagania wstępne
Przed kontynuowaniem potwierdź następujące kwestie:
- MySQL Server lub MariaDB jest zainstalowany i usługa jest aktywna.
- Posiadasz konto użytkownika z co najmniej uprawnieniem
SHOW DATABASESlub uwierzytelniasz się jakoroot. - Plik binarny klienta
mysqljest dostępny wPATHTwojej powłoki (zweryfikuj za pomocąwhich mysql).
Jeśli zarządzasz zdalnym serwerem — na przykład środowiskiem VPS Hosting — upewnij się również, że port MySQL (domyślnie 3306) jest osiągalny lub że łączysz się przez SSH.
Krok 1: Sprawdź, czy usługa MySQL jest uruchomiona
Przed próbą połączenia potwierdź, że demon jest aktywny:
sudo systemctl status mysqlW przypadku instalacji MariaDB nazwa usługi jest inna:
sudo systemctl status mariadbJeśli usługa jest zatrzymana, uruchom ją:
sudo systemctl start mysqlNieudane uruchomienie jest prawie zawsze wyjaśnione w journalctl -xe lub w /var/log/mysql/error.log. Sprawdź te pliki najpierw, zanim założysz problem z konfiguracją.
Krok 2: Uwierzytelnij się na serwerze MySQL
Standardowe interaktywne logowanie
mysql -u root -p-u root— określa nazwę użytkownika MySQL. Zastąprootdowolnym prawidłowym kontem.-p— monituje o hasło interaktywnie. Nigdy nie podawaj hasła bezpośrednio w wierszu poleceń w środowisku produkcyjnym (np.-pMyPassword), ponieważ jest ono widoczne na listach procesów i w historii powłoki.
Po wprowadzeniu prawidłowego hasła pojawia się monit MySQL:
mysql>Łączenie ze zdalnym hostem lub niestandardowym portem
mysql -u root -p -h 192.168.1.100 -P 3307-h— określa zdalny adres IP hosta lub nazwę hosta.-P— określa niestandardowy numer portu.
Używanie pliku opcji do automatyzacji
W przypadku skryptów i zadań cron przechowuj dane uwierzytelniające w chronionym pliku opcji zamiast osadzać je w poleceniu:
# ~/.my.cnf
[client]
user=root
password=YourSecurePasswordOgranicz uprawnienia natychmiast po utworzeniu pliku:
chmod 600 ~/.my.cnfGdy ten plik jest na miejscu, mysql uwierzytelnia się bez żadnych flag:
mysqlKrok 3: Wylistuj wszystkie bazy danych
Po wejściu do powłoki MySQL uruchom:
SHOW DATABASES;Przykładowe wyjście na świeżo zainstalowanej instancji MySQL 8:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)Te cztery schematy systemowe są obecne w każdej standardowej instalacji MySQL:
| Schemat | Przeznaczenie |
|---|---|
| — | — |
| `information_schema` | Wirtualny schemat tylko do odczytu udostępniający metadane o wszystkich innych schematach, tabelach, kolumnach i uprawnieniach |
| `mysql` | Podstawowe tabele uprawnień, dane stref czasowych i konfiguracja serwera |
| `performance_schema` | Niskopoziomowe dane instrumentacji do profilowania zapytań i diagnostyki |
| `sys` | Widoki czytelne dla człowieka zbudowane na bazie `performance_schema` |
Bazy danych utworzone przez użytkownika pojawiają się obok tych schematów systemowych.
Krok 4: Filtruj listę baz danych
Filtruj według wzorca nazwy
SHOW DATABASES akceptuje klauzulę LIKE, która jest przydatna, gdy serwer hostuje dziesiątki baz danych:
SHOW DATABASES LIKE 'wp_%';Zwraca to tylko bazy danych, których nazwy zaczynają się od wp_ — powszechna konwencja nazewnictwa dla instalacji WordPress.
Zapytaj information_schema w celu zaawansowanego filtrowania
Aby uzyskać bardziej precyzyjne filtrowanie, zapytaj tabelę information_schema.SCHEMATA bezpośrednio:
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;To podejście pozwala filtrować według zestawu znaków, sortowania lub dowolnej innej kolumny metadanych — czego SHOW DATABASES nie może zrobić.
Krok 5: Sprawdź konkretną bazę danych
Aby zbadać zawartość konkretnej bazy danych, przełącz kontekst za pomocą USE, a następnie wylistuj jej tabele:
USE database_name;
SHOW TABLES;Aby zobaczyć rozmiary tabel, liczby wierszy i silniki przechowywania w jednym zapytaniu:
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;Jest to znacznie bardziej przydatne niż samo SHOW TABLES i jest to rodzaj zapytania, które administrator baz danych uruchamia przed planowaniem migracji lub strategii tworzenia kopii zapasowych.
Krok 6: Wyjdź z powłoki MySQL
EXIT;Lub użyj skrótu klawiaturowego Ctrl+D.
Użycie nieinteraktywne: wylistowanie baz danych z powłoki
W zautomatyzowanych potokach — skryptach kopii zapasowych, agentach monitorowania, hookach wdrożeniowych — musisz pobrać listę baz danych bez wchodzenia w interaktywną sesję.
Jednolinijkowiec z flagą -e
mysql -u root -p -e "SHOW DATABASES;"Pomiń wiersz nagłówka dla skryptowania
mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/nullFlaga --skip-column-names usuwa nagłówek Database, generując czyste wyjście odpowiednie do iteracji w pętli powłoki:
for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
echo "Processing: $db"
doneUżywanie mysqlshow jako alternatywy
Narzędzie mysqlshow zapewnia szybki przegląd bez wchodzenia do powłoki MySQL:
mysqlshow -u root -pWylistowuje wszystkie bazy danych, które uwierzytelniony użytkownik może zobaczyć, i akceptuje argument nazwy bazy danych, aby przejść do szczegółów na poziomie tabel:
mysqlshow -u root -p database_nameZakres uprawnień: dlaczego niektóre bazy danych są ukryte
Jest to jedno z najbardziej niezrozumianych zachowań w MySQL. Gdy użytkownik nie posiada globalnego uprawnienia SHOW DATABASES, SHOW DATABASES zwraca tylko bazy danych, dla których ten użytkownik posiada co najmniej jedno uprawnienie. Jest to celowe — jest to granica bezpieczeństwa, a nie błąd.
Praktyczna implikacja: Ograniczony użytkownik aplikacji może uruchomić SHOW DATABASES; i zobaczyć tylko jedną lub dwie bazy danych, nawet jeśli serwer hostuje pięćdziesiąt. Jest to prawidłowe zachowanie. Jeśli użytkownik musi widzieć pełną listę, nadaj uprawnienie jawnie:
GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;Używaj tego nadania oszczędnie. W środowiskach wielodostępnych — takich jak konfiguracja Shared Web Hosting lub wdrożenie Dedicated Servers dla wielu klientów — ujawnianie pełnej listy baz danych użytkownikom aplikacji stanowi zagrożenie bezpieczeństwa.
MySQL vs. MariaDB: różnice w zachowaniu
Zarówno MySQL, jak i MariaDB obsługują SHOW DATABASES; i information_schema.SCHEMATA, ale istnieją subtelne różnice warte poznania:
| Funkcja | MySQL 8.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| Składnia `SHOW DATABASES` | Obsługiwana | Obsługiwana |
| `information_schema.SCHEMATA` | Dostępny | Dostępny |
| Domyślny `performance_schema` | Włączony | Włączony (10.5+) |
| Schemat `sys` | Dołączony domyślnie | Opcjonalny, nie zawsze obecny |
| `SHOW DATABASES LIKE` | Obsługiwany | Obsługiwany |
| Model uprawnień oparty na rolach | Natywny (8.0+) | Natywny (10.0.5+) |
| Plik binarny klienta `mysql` | `mysql` | `mysql` lub `mariadb` |
W nowszych instalacjach MariaDB kanonicznym plikiem binarnym może być mariadb zamiast mysql, choć dowiązanie symboliczne zazwyczaj zachowuje wsteczną kompatybilność.
Typowe błędy i sposoby ich naprawy
ERROR 1045 (28000): Access denied for user
Oznacza to, że uwierzytelnianie nie powiodło się. Sprawdź dokładnie nazwę użytkownika, hasło i host. W przypadku root w MySQL 8 domyślną wtyczką uwierzytelniania jest caching_sha2_password. Jeśli Twój klient jej nie obsługuje, połącz się przez gniazdo:
sudo mysql -u rootOmija to uwierzytelnianie hasłem podczas uruchamiania jako użytkownik Linux root, opierając się zamiast tego na wtyczce auth_socket lub unix_socket.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
Demon MySQL nie jest uruchomiony lub ścieżka do pliku gniazda jest nieprawidłowa. Sprawdź:
sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sockERROR 1044 (42000): Access denied for user to database
Użytkownik jest uwierzytelniony, ale nie posiada uprawnień do docelowej bazy danych. Przejrzyj nadania za pomocą:
SHOW GRANTS FOR 'username'@'host';Praktyczna macierz decyzyjna
Użyj tego odniesienia, aby wybrać właściwe podejście dla swojej sytuacji:
| Scenariusz | Zalecane polecenie |
|---|---|
| — | — |
| Interaktywna eksploracja | `SHOW DATABASES;` wewnątrz powłoki `mysql` |
| Filtrowanie według prefiksu nazwy | `SHOW DATABASES LIKE 'prefix_%';` |
| Listowanie z bogatymi metadanymi | Zapytanie `information_schema.SCHEMATA` |
| Skryptowanie powłoki / automatyzacja | `mysql -e "SHOW DATABASES;" –skip-column-names` |
| Szybki przegląd bez powłoki | `mysqlshow -u root -p` |
| Zdalny serwer, niestandardowy port | `mysql -u root -p -h host -P port` |
| Automatyzacja bez hasła | Plik opcji `~/.my.cnf` z `chmod 600` |
| Debugowanie problemów z dostępem | `SHOW GRANTS FOR 'user'@'host';` |
Kluczowe wnioski techniczne
SHOW DATABASES;jest ograniczony zakresem uprawnień. Użytkownik bez globalnegoSHOW DATABASESwidzi tylko bazy danych, do których ma jawny dostęp — jest to funkcja bezpieczeństwa, a nie błąd konfiguracji.- Nigdy nie podawaj haseł jako argumentów wiersza poleceń w środowisku produkcyjnym. Używaj
-pdo sesji interaktywnych i~/.my.cnfdo automatyzacji. information_schema.SCHEMATAjest zdecydowanie potężniejszy niżSHOW DATABASESw przypadku zapytań skryptowanych lub filtrowanych.- Narzędzie
mysqlshowjest niedoceniane i zapewnia szybką, nieinteraktywną inspekcję baz danych i tabel. - W MySQL 8 uwierzytelnianie oparte na gnieździe (
sudo mysql) jest często najszybszą ścieżką do dostępu root na lokalnym serwerze. - Podczas zarządzania wieloma bazami danych na VPS z cPanel lub innym panelem sterowania, menedżer baz danych panelu jest graficzną nakładką na te same polecenia SQL — zrozumienie podstawowych zapytań daje pełną kontrolę, gdy GUI nie wystarcza.
- W środowiskach, gdzie dostęp do bazy danych jest powiązany z SSL Certificates i szyfrowanymi połączeniami, dodaj
--ssl-mode=REQUIREDdo wywołań klientamysql, aby wymusić TLS podczas transmisji.
FAQ
P: Dlaczego SHOW DATABASES nie pokazuje wszystkich baz danych na moim serwerze?
O: Konto użytkownika, jako które jesteś uwierzytelniony, nie posiada globalnego uprawnienia SHOW DATABASES. MySQL zwraca tylko bazy danych, dla których ten użytkownik posiada co najmniej jedno uprawnienie. Uwierzytelnij się jako root lub nadaj uprawnienie SHOW DATABASES, aby zobaczyć pełną listę.
P: Jaka jest różnica między SHOW DATABASES a zapytaniem information_schema.SCHEMATA?
O: Obie metody zwracają listę dostępnych schematów, ale information_schema.SCHEMATA udostępnia dodatkowe kolumny metadanych — domyślny zestaw znaków, domyślne sortowanie — i obsługuje pełne filtrowanie SQL za pomocą WHERE, ORDER BY i JOIN. Używaj SHOW DATABASES do szybkich interaktywnych sprawdzeń i information_schema.SCHEMATA do zapytań skryptowanych lub analitycznych.
P: Jak wylistować bazy danych na zdalnym serwerze MySQL bez otwierania sesji interaktywnej?
O: Użyj flagi -e w połączeniu z opcjami hosta i portu:
mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-namesP: Czy mogę wylistować bazy danych MySQL bez znajomości hasła root?
O: Na lokalnym serwerze, gdzie masz dostęp Linux root, tak. Wtyczka auth_socket MySQL (lub unix_socket w MariaDB) uwierzytelnia na podstawie użytkownika systemu operacyjnego Linux. Uruchom sudo mysql i uzyskasz dostęp jako użytkownik MySQL root bez monitu o hasło.
P: Czy SHOW DATABASES działa tak samo w MariaDB jak w MySQL?
O: Składnia jest identyczna, a reguły zakresu uprawnień są takie same. Główna praktyczna różnica polega na tym, że MariaDB może domyślnie nie zawierać schematu sys, a w nowszych wersjach MariaDB preferowanym plikiem binarnym klienta jest mariadb zamiast mysql, choć alias mysql jest zazwyczaj zachowany dla kompatybilności.
