15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
15.10.2024
3 +1

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 DATABASES lub uwierzytelniasz się jako root.
  • Plik binarny klienta mysql jest dostępny w PATH Twojej 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 mysql

W przypadku instalacji MariaDB nazwa usługi jest inna:

sudo systemctl status mariadb

Jeśli usługa jest zatrzymana, uruchom ją:

sudo systemctl start mysql

Nieudane 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ąp root dowolnym 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=YourSecurePassword

Ogranicz uprawnienia natychmiast po utworzeniu pliku:

chmod 600 ~/.my.cnf

Gdy ten plik jest na miejscu, mysql uwierzytelnia się bez żadnych flag:

mysql

Krok 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:

SchematPrzeznaczenie
`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/null

Flaga --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"
done

Używanie mysqlshow jako alternatywy

Narzędzie mysqlshow zapewnia szybki przegląd bez wchodzenia do powłoki MySQL:

mysqlshow -u root -p

Wylistowuje 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_name

Zakres 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:

FunkcjaMySQL 8.xMariaDB 10.x
Składnia `SHOW DATABASES`ObsługiwanaObsługiwana
`information_schema.SCHEMATA`DostępnyDostępny
Domyślny `performance_schema`WłączonyWłączony (10.5+)
Schemat `sys`Dołączony domyślnieOpcjonalny, nie zawsze obecny
`SHOW DATABASES LIKE`ObsługiwanyObsługiwany
Model uprawnień oparty na rolachNatywny (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 root

Omija 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.sock

ERROR 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:

ScenariuszZalecane polecenie
Interaktywna eksploracja`SHOW DATABASES;` wewnątrz powłoki `mysql`
Filtrowanie według prefiksu nazwy`SHOW DATABASES LIKE 'prefix_%';`
Listowanie z bogatymi metadanymiZapytanie `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łaPlik 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 globalnego SHOW DATABASES widzi 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 -p do sesji interaktywnych i ~/.my.cnf do automatyzacji.
  • information_schema.SCHEMATA jest zdecydowanie potężniejszy niż SHOW DATABASES w przypadku zapytań skryptowanych lub filtrowanych.
  • Narzędzie mysqlshow jest 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=REQUIRED do wywołań klienta mysql, 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-names

P: 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.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij