Cum să listezi bazele de date MySQL prin linia de comandă pe Linux
Listarea tuturor bazelor de date MySQL din linia de comandă se realizează cu o singură instrucțiune SQL — SHOW DATABASES; — executată după autentificarea la serverul MySQL folosind clientul mysql. Aceasta funcționează pe orice distribuție Linux care rulează MySQL 5.7, MySQL 8.x sau un server MariaDB compatibil și necesită fie privilegiul SHOW DATABASES, fie acces de superutilizator.
Acest ghid depășește comanda de bază. Acoperă opțiunile de autentificare, vizibilitatea limitată de privilegii, tipare de scripting non-interactiv, filtrarea schemei de performanță și modurile comune de eșec care îi surprind chiar și pe administratorii experimentați.
Cerințe preliminare
Înainte de a continua, confirmați următoarele:
- MySQL Server sau MariaDB este instalat și serviciul este activ.
- Aveți un cont de utilizator cu cel puțin privilegiul
SHOW DATABASES, sau vă autentificați caroot. - Binarul client
mysqleste disponibil înPATHal shell-ului dvs. (verificați cuwhich mysql).
Dacă gestionați un server la distanță — de exemplu, un mediu de VPS Hosting — asigurați-vă, de asemenea, că portul MySQL (implicit 3306) este accesibil sau că vă conectați prin SSH.
Pasul 1: Verificați dacă serviciul MySQL rulează
Înainte de a încerca să vă conectați, confirmați că daemonul este activ:
sudo systemctl status mysqlPentru instalările MariaDB, numele serviciului diferă:
sudo systemctl status mariadbDacă serviciul este oprit, porniți-l:
sudo systemctl start mysqlUn eșec la pornire este aproape întotdeauna explicat în journalctl -xe sau în /var/log/mysql/error.log. Verificați mai întâi acele fișiere înainte de a presupune o problemă de configurare.
Pasul 2: Autentificați-vă la serverul MySQL
Autentificare interactivă standard
mysql -u root -p-u root— specifică numele de utilizator MySQL. Înlocuițirootcu orice cont valid.-p— solicită parola în mod interactiv. Nu transmiteți niciodată parola direct în linia de comandă în producție (de ex.,-pMyPassword), deoarece este vizibilă în listele de procese și în istoricul shell-ului.
După introducerea corectă a parolei, apare promptul MySQL:
mysql>Conectarea la un host la distanță sau la un port non-implicit
mysql -u root -p -h 192.168.1.100 -P 3307-h— specifică IP-ul sau numele de host al serverului la distanță.-P— specifică un număr de port non-implicit.
Utilizarea unui fișier de opțiuni pentru automatizare
Pentru scripturi și sarcini cron, stocați credențialele într-un fișier de opțiuni protejat în loc să le includeți în comandă:
# ~/.my.cnf
[client]
user=root
password=YourSecurePasswordRestricționați permisiunile imediat după crearea fișierului:
chmod 600 ~/.my.cnfCu acest fișier în loc, mysql se autentifică fără niciun indicator:
mysqlPasul 3: Listați toate bazele de date
Odată în shell-ul MySQL, rulați:
SHOW DATABASES;Exemplu de ieșire pe o instanță MySQL 8 proaspăt instalată:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)Aceste patru scheme de sistem sunt prezente pe fiecare instalare standard MySQL:
| Schemă | Scop |
|---|---|
| — | — |
| `information_schema` | Schemă virtuală doar pentru citire care expune metadate despre toate celelalte scheme, tabele, coloane și privilegii |
| `mysql` | Tabele de grant de bază, date despre fusul orar și configurarea serverului |
| `performance_schema` | Date de instrumentare de nivel scăzut pentru profilarea interogărilor și diagnosticare |
| `sys` | Vizualizări ușor de citit construite pe baza `performance_schema` |
Bazele de date create de utilizatori apar alături de aceste scheme de sistem.
Pasul 4: Filtrați lista de baze de date
Filtrare după tiparul numelui
SHOW DATABASES acceptă o clauză LIKE, care este utilă când un server găzduiește zeci de baze de date:
SHOW DATABASES LIKE 'wp_%';Aceasta returnează doar bazele de date ale căror nume încep cu wp_ — o convenție de denumire comună pentru instalările WordPress.
Interogați information_schema pentru filtrare avansată
Pentru filtrare mai precisă, interogați direct tabelul information_schema.SCHEMATA:
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;Această abordare vă permite să filtrați după set de caractere, colație sau orice altă coloană de metadate — ceva ce SHOW DATABASES nu poate face.
Pasul 5: Inspectați o bază de date specifică
Pentru a examina conținutul unei anumite baze de date, schimbați contextul cu USE și apoi listați tabelele sale:
USE database_name;
SHOW TABLES;Pentru a vedea dimensiunile tabelelor, numărul de rânduri și motoarele de stocare într-o singură interogare:
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;Aceasta este mult mai utilă decât SHOW TABLES singur și este tipul de interogare pe care un DBA o rulează înainte de a planifica o strategie de migrare sau backup.
Pasul 6: Ieșiți din shell-ul MySQL
EXIT;Sau folosiți comanda rapidă de la tastatură Ctrl+D.
Utilizare non-interactivă: Listarea bazelor de date din shell
În pipeline-uri automatizate — scripturi de backup, agenți de monitorizare, hook-uri de deployment — trebuie să recuperați lista de baze de date fără a intra într-o sesiune interactivă.
One-liner cu indicatorul -e
mysql -u root -p -e "SHOW DATABASES;"Suprimați rândul de antet pentru scripting
mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/nullIndicatorul --skip-column-names elimină antetul Database, producând ieșire curată potrivită pentru iterație într-o buclă shell:
for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
echo "Processing: $db"
doneUtilizarea mysqlshow ca alternativă
Utilitarul mysqlshow oferă o prezentare rapidă fără a intra în shell-ul MySQL:
mysqlshow -u root -pListează toate bazele de date pe care utilizatorul autentificat le poate vedea și acceptă un argument cu numele bazei de date pentru a intra în detalii la nivel de tabel:
mysqlshow -u root -p database_nameLimitarea privilegiilor: De ce unele baze de date sunt ascunse
Acesta este unul dintre cele mai neînțelese comportamente din MySQL. Când un utilizator nu are privilegiul global SHOW DATABASES, SHOW DATABASES returnează doar bazele de date pentru care acel utilizator deține cel puțin un privilegiu. Aceasta este prin design — este o limită de securitate, nu o eroare.
Implicație practică: Un utilizator de aplicație restricționat poate rula SHOW DATABASES; și poate vedea doar una sau două baze de date, chiar dacă serverul găzduiește cincizeci. Acesta este comportamentul corect. Dacă un utilizator trebuie să vadă lista completă, acordați privilegiul în mod explicit:
GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;Utilizați acest grant cu moderație. În medii multi-tenant — cum ar fi o configurație de Shared Web Hosting sau un deployment de Dedicated Servers cu mai mulți clienți — expunerea listei complete de baze de date utilizatorilor de aplicații reprezintă un risc de securitate.
MySQL vs. MariaDB: Diferențe de comportament
Atât MySQL cât și MariaDB suportă SHOW DATABASES; și information_schema.SCHEMATA, dar există diferențe subtile care merită cunoscute:
| Funcționalitate | MySQL 8.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| Sintaxa `SHOW DATABASES` | Suportată | Suportată |
| `information_schema.SCHEMATA` | Disponibil | Disponibil |
| Implicit `performance_schema` | Activat | Activat (10.5+) |
| Schema `sys` | Inclusă implicit | Opțională, nu întotdeauna prezentă |
| `SHOW DATABASES LIKE` | Suportat | Suportat |
| Model de privilegii bazat pe roluri | Nativ (8.0+) | Nativ (10.0.5+) |
| Binar client `mysql` | `mysql` | `mysql` sau `mariadb` |
Pe instalările mai noi de MariaDB, binarul canonic poate fi mariadb în loc de mysql, deși un symlink păstrează de obicei compatibilitatea cu versiunile anterioare.
Erori comune și cum să le remediați
ERROR 1045 (28000): Access denied for user
Aceasta înseamnă că autentificarea a eșuat. Verificați din nou numele de utilizator, parola și host-ul. Pentru root pe MySQL 8, plugin-ul de autentificare implicit este caching_sha2_password. Dacă clientul dvs. nu îl suportă, conectați-vă prin socket:
sudo mysql -u rootAceasta ocolește autentificarea prin parolă când rulați ca utilizatorul Linux root, bazându-se în schimb pe plugin-ul auth_socket sau unix_socket.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
Daemonul MySQL nu rulează sau calea fișierului socket este greșită. Verificați:
sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sockERROR 1044 (42000): Access denied for user to database
Utilizatorul este autentificat, dar nu are privilegii pe baza de date țintă. Examinați granturile cu:
SHOW GRANTS FOR 'username'@'host';Matrice de decizie practică
Utilizați această referință pentru a selecta abordarea potrivită pentru situația dvs.:
| Scenariu | Comandă recomandată |
|---|---|
| — | — |
| Explorare interactivă | `SHOW DATABASES;` în shell-ul `mysql` |
| Filtrare după prefix de nume | `SHOW DATABASES LIKE 'prefix_%';` |
| Listare bogată în metadate | Interogați `information_schema.SCHEMATA` |
| Scripting shell / automatizare | `mysql -e "SHOW DATABASES;" –skip-column-names` |
| Prezentare rapidă fără shell | `mysqlshow -u root -p` |
| Server la distanță, port non-implicit | `mysql -u root -p -h host -P port` |
| Automatizare fără parolă | Fișier de opțiuni `~/.my.cnf` cu `chmod 600` |
| Depanarea problemelor de acces | `SHOW GRANTS FOR 'user'@'host';` |
Concluzii tehnice cheie
SHOW DATABASES;este limitat de privilegii. Un utilizator fără privilegiul globalSHOW DATABASESvede doar bazele de date la care are acces explicit — aceasta este o funcție de securitate, nu o configurare greșită.- Nu transmiteți niciodată parole ca argumente în linia de comandă în producție. Utilizați
-ppentru sesiuni interactive și~/.my.cnfpentru automatizare. information_schema.SCHEMATAeste strict mai puternic decâtSHOW DATABASESpentru interogări scriptate sau filtrate.- Utilitarul
mysqlshoweste subutilizat și oferă inspecție rapidă, non-interactivă a bazelor de date și tabelelor. - Pe MySQL 8, autentificarea bazată pe socket (
sudo mysql) este adesea cea mai rapidă cale de acces root pe un server local. - Când gestionați mai multe baze de date pe un VPS cu cPanel sau alt panou de control, managerul de baze de date al panoului este o interfață grafică peste aceleași comenzi SQL — înțelegerea interogărilor de bază vă oferă control deplin când interfața grafică nu este suficientă.
- Pentru mediile în care accesul la baze de date este legat de SSL Certificates și conexiuni criptate, adăugați
--ssl-mode=REQUIREDla invocările clientuluimysqlpentru a impune TLS în tranzit.
Întrebări frecvente
Î: De ce SHOW DATABASES nu afișează toate bazele de date de pe serverul meu?
R: Contul de utilizator cu care sunteți autentificat nu are privilegiul global SHOW DATABASES. MySQL returnează doar bazele de date pentru care acel utilizator deține cel puțin un privilegiu. Autentificați-vă ca root sau acordați privilegiul SHOW DATABASES pentru a vedea lista completă.
Î: Care este diferența dintre SHOW DATABASES și interogarea information_schema.SCHEMATA?
R: Ambele returnează lista schemelor accesibile, dar information_schema.SCHEMATA expune coloane suplimentare de metadate — setul de caractere implicit, colația implicită — și suportă filtrare SQL completă cu WHERE, ORDER BY și JOIN. Utilizați SHOW DATABASES pentru verificări interactive rapide și information_schema.SCHEMATA pentru interogări scriptate sau analitice.
Î: Cum listez bazele de date pe un server MySQL la distanță fără a deschide o sesiune interactivă?
R: Utilizați indicatorul -e combinat cu opțiunile de host și port:
mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-namesÎ: Pot lista bazele de date MySQL fără a cunoaște parola root?
R: Pe un server local unde aveți acces Linux root, da. Plugin-ul auth_socket al MySQL (sau unix_socket pe MariaDB) autentifică pe baza utilizatorului OS Linux. Rulați sudo mysql și vi se va acorda acces ca utilizatorul MySQL root fără o solicitare de parolă.
Î: SHOW DATABASES funcționează la fel pe MariaDB ca pe MySQL?
R: Sintaxa este identică și regulile de limitare a privilegiilor sunt aceleași. Diferența practică principală este că MariaDB poate să nu includă schema sys implicit, iar pe versiunile mai noi de MariaDB binarul client preferat este mariadb în loc de mysql, deși aliasul mysql este de obicei păstrat pentru compatibilitate.
