15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
15.10.2024
3 +1

Comment lister les bases de données MySQL via la ligne de commande sur Linux

Lister toutes les bases de données MySQL depuis la ligne de commande s’effectue avec une seule instruction SQL — SHOW DATABASES; — exécutée après authentification sur le serveur MySQL à l’aide du client mysql. Cela fonctionne sur toute distribution Linux exécutant MySQL 5.7, MySQL 8.x, ou un serveur MariaDB compatible, et nécessite soit le privilège SHOW DATABASES, soit un accès superutilisateur.

Ce guide va au-delà de la commande de base. Il couvre les options d’authentification, la visibilité limitée par les privilèges, les modèles de scripts non interactifs, le filtrage du schéma de performance, et les modes d’échec courants qui piègent même les administrateurs expérimentés.

Prérequis

Avant de continuer, confirmez les points suivants :

  • MySQL Server ou MariaDB est installé et le service est actif.
  • Vous disposez d’un compte utilisateur avec au moins le privilège SHOW DATABASES, ou vous vous authentifiez en tant que root.
  • Le binaire client mysql est disponible dans le PATH de votre shell (vérifiez avec which mysql).

Si vous gérez un serveur distant — par exemple, un environnement VPS Hosting — assurez-vous également que le port MySQL (par défaut 3306) est accessible ou que vous vous connectez via SSH.

Étape 1 : Vérifier que le service MySQL est en cours d’exécution

Avant de tenter une connexion, confirmez que le démon est actif :

sudo systemctl status mysql

Pour les installations MariaDB, le nom du service diffère :

sudo systemctl status mariadb

Si le service est arrêté, démarrez-le :

sudo systemctl start mysql

Un échec de démarrage est presque toujours expliqué dans journalctl -xe ou dans /var/log/mysql/error.log. Consultez ces fichiers en premier avant de supposer un problème de configuration.

Étape 2 : S’authentifier sur le serveur MySQL

Connexion interactive standard

mysql -u root -p
  • -u root — spécifie le nom d’utilisateur MySQL. Remplacez root par tout compte valide.
  • -p — demande le mot de passe de manière interactive. Ne transmettez jamais le mot de passe directement sur la ligne de commande en production (par ex., -pMyPassword), car il est visible dans les listes de processus et l’historique du shell.

Après la saisie d’un mot de passe correct, l’invite MySQL apparaît :

mysql>

Connexion à un hôte distant ou à un port non standard

mysql -u root -p -h 192.168.1.100 -P 3307
  • -h — spécifie l’IP ou le nom d’hôte distant.
  • -P — spécifie un numéro de port non standard.

Utilisation d’un fichier d’options pour l’automatisation

Pour les scripts et les tâches cron, stockez les identifiants dans un fichier d’options protégé plutôt que de les intégrer dans la commande :

# ~/.my.cnf
[client]
user=root
password=YourSecurePassword

Restreignez immédiatement les permissions après la création du fichier :

chmod 600 ~/.my.cnf

Avec ce fichier en place, mysql s’authentifie sans aucun indicateur :

mysql

Étape 3 : Lister toutes les bases de données

Une fois dans le shell MySQL, exécutez :

SHOW DATABASES;

Exemple de sortie sur une instance MySQL 8 fraîchement installée :

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

Ces quatre schémas système sont présents sur toute installation MySQL standard :

SchémaObjectif
`information_schema`Schéma virtuel en lecture seule exposant les métadonnées sur tous les autres schémas, tables, colonnes et privilèges
`mysql`Tables de droits principales, données de fuseau horaire et configuration du serveur
`performance_schema`Données d’instrumentation de bas niveau pour le profilage des requêtes et les diagnostics
`sys`Vues lisibles par l’homme construites sur `performance_schema`

Les bases de données créées par les utilisateurs apparaissent aux côtés de ces schémas système.

Étape 4 : Filtrer la liste des bases de données

Filtrer par modèle de nom

SHOW DATABASES accepte une clause LIKE, ce qui est utile lorsqu’un serveur héberge des dizaines de bases de données :

SHOW DATABASES LIKE 'wp_%';

Cela retourne uniquement les bases de données dont les noms commencent par wp_ — une convention de nommage courante pour les installations WordPress.

Interroger information_schema pour un filtrage avancé

Pour un filtrage plus précis, interrogez directement la table 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;

Cette approche vous permet de filtrer par jeu de caractères, collation, ou toute autre colonne de métadonnées — ce que SHOW DATABASES ne peut pas faire.

Étape 5 : Inspecter une base de données spécifique

Pour examiner le contenu d’une base de données particulière, changez de contexte avec USE puis listez ses tables :

USE database_name;
SHOW TABLES;

Pour voir les tailles des tables, le nombre de lignes et les moteurs de stockage en une seule requête :

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;

C’est bien plus exploitable que SHOW TABLES seul et c’est le type de requête qu’un DBA exécute avant de planifier une migration ou une stratégie de sauvegarde.

Étape 6 : Quitter le shell MySQL

EXIT;

Ou utilisez le raccourci clavier Ctrl+D.

Utilisation non interactive : lister les bases de données depuis le shell

Dans les pipelines automatisés — scripts de sauvegarde, agents de surveillance, hooks de déploiement — vous devez récupérer la liste des bases de données sans entrer dans une session interactive.

Commande en une ligne avec l’indicateur -e

mysql -u root -p -e "SHOW DATABASES;"

Supprimer la ligne d’en-tête pour les scripts

mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null

L’indicateur --skip-column-names supprime l’en-tête Database, produisant une sortie propre adaptée à l’itération dans une boucle shell :

for db in $(mysql -u root -p --skip-column-names -e "SHOW DATABASES;" 2>/dev/null); do
  echo "Processing: $db"
done

Utiliser mysqlshow comme alternative

L’utilitaire mysqlshow fournit un aperçu rapide sans entrer dans le shell MySQL :

mysqlshow -u root -p

Il liste toutes les bases de données que l’utilisateur authentifié peut voir, et accepte un argument de nom de base de données pour explorer les détails au niveau des tables :

mysqlshow -u root -p database_name

Portée des privilèges : pourquoi certaines bases de données sont masquées

C’est l’un des comportements les plus mal compris dans MySQL. Lorsqu’un utilisateur ne dispose pas du privilège global SHOW DATABASES, SHOW DATABASES retourne uniquement les bases de données pour lesquelles cet utilisateur détient au moins un privilège. C’est intentionnel — il s’agit d’une limite de sécurité, pas d’un bug.

Implication pratique : Un utilisateur d’application restreint peut exécuter SHOW DATABASES; et ne voir qu’une ou deux bases de données, même si le serveur en héberge cinquante. C’est un comportement correct. Si un utilisateur doit voir la liste complète, accordez le privilège explicitement :

GRANT SHOW DATABASES ON *.* TO 'username'@'host';
FLUSH PRIVILEGES;

Utilisez cette attribution avec parcimonie. Dans les environnements multi-locataires — tels qu’une configuration Shared Web Hosting ou un déploiement Dedicated Servers multi-clients — exposer la liste complète des bases de données aux utilisateurs d’applications constitue un risque de sécurité.

MySQL vs. MariaDB : différences de comportement

MySQL et MariaDB prennent tous deux en charge SHOW DATABASES; et information_schema.SCHEMATA, mais il existe des différences subtiles à connaître :

FonctionnalitéMySQL 8.xMariaDB 10.x
Syntaxe `SHOW DATABASES`Prise en chargePrise en charge
`information_schema.SCHEMATA`DisponibleDisponible
Valeur par défaut `performance_schema`ActivéActivé (10.5+)
Schéma `sys`Inclus par défautOptionnel, pas toujours présent
`SHOW DATABASES LIKE`Pris en chargePris en charge
Modèle de privilèges basé sur les rôlesNatif (8.0+)Natif (10.0.5+)
Binaire client `mysql``mysql``mysql` ou `mariadb`

Sur les nouvelles installations MariaDB, le binaire canonique peut être mariadb plutôt que mysql, bien qu’un lien symbolique préserve généralement la compatibilité ascendante.

Erreurs courantes et comment les corriger

ERROR 1045 (28000): Access denied for user

Cela signifie que l’authentification a échoué. Vérifiez le nom d’utilisateur, le mot de passe et l’hôte. Pour root sur MySQL 8, le plugin d’authentification par défaut est caching_sha2_password. Si votre client ne le prend pas en charge, connectez-vous via socket :

sudo mysql -u root

Cela contourne l’authentification par mot de passe lors de l’exécution en tant qu’utilisateur Linux root, en s’appuyant sur le plugin auth_socket ou unix_socket à la place.

ERROR 2002 (HY000): Can't connect to local MySQL server through socket

Le démon MySQL n’est pas en cours d’exécution, ou le chemin du fichier socket est incorrect. Vérifiez :

sudo systemctl status mysql
ls -la /var/run/mysqld/mysqld.sock

ERROR 1044 (42000): Access denied for user to database

L’utilisateur est authentifié mais ne dispose pas des privilèges sur la base de données cible. Examinez les droits avec :

SHOW GRANTS FOR 'username'@'host';

Matrice de décision pratique

Utilisez cette référence pour sélectionner la bonne approche selon votre situation :

ScénarioCommande recommandée
Exploration interactive`SHOW DATABASES;` dans le shell `mysql`
Filtrer par préfixe de nom`SHOW DATABASES LIKE 'prefix_%';`
Listing enrichi en métadonnéesInterroger `information_schema.SCHEMATA`
Scripts shell / automatisation`mysql -e "SHOW DATABASES;" –skip-column-names`
Aperçu rapide sans shell`mysqlshow -u root -p`
Serveur distant, port non standard`mysql -u root -p -h host -P port`
Automatisation sans mot de passeFichier d’options `~/.my.cnf` avec `chmod 600`
Débogage des problèmes d’accès`SHOW GRANTS FOR 'user'@'host';`

Points techniques clés à retenir

  • SHOW DATABASES; est limité par les privilèges. Un utilisateur sans SHOW DATABASES global ne voit que les bases de données auxquelles il a un accès explicite — c’est une fonctionnalité de sécurité, pas une mauvaise configuration.
  • Ne transmettez jamais les mots de passe comme arguments de ligne de commande en production. Utilisez -p pour les sessions interactives et ~/.my.cnf pour l’automatisation.
  • information_schema.SCHEMATA est strictement plus puissant que SHOW DATABASES pour les requêtes scriptées ou filtrées.
  • L’utilitaire mysqlshow est sous-utilisé et fournit une inspection rapide et non interactive des bases de données et des tables.
  • Sur MySQL 8, l’authentification par socket (sudo mysql) est souvent le chemin le plus rapide vers l’accès root sur un serveur local.
  • Lors de la gestion de plusieurs bases de données sur un VPS avec cPanel ou un autre panneau de contrôle, le gestionnaire de bases de données du panneau est une interface graphique encapsulant ces mêmes commandes SQL — comprendre les requêtes sous-jacentes vous donne un contrôle total lorsque l’interface graphique est insuffisante.
  • Pour les environnements où l’accès aux bases de données est lié aux SSL Certificates et aux connexions chiffrées, ajoutez --ssl-mode=REQUIRED à vos invocations du client mysql pour imposer TLS en transit.

FAQ

Q : Pourquoi SHOW DATABASES n’affiche-t-il pas toutes les bases de données sur mon serveur ?

R : Le compte utilisateur avec lequel vous êtes authentifié ne dispose pas du privilège global SHOW DATABASES. MySQL retourne uniquement les bases de données pour lesquelles cet utilisateur détient au moins un privilège. Authentifiez-vous en tant que root ou accordez le privilège SHOW DATABASES pour voir la liste complète.

Q : Quelle est la différence entre SHOW DATABASES et l’interrogation de information_schema.SCHEMATA ?

R : Les deux retournent la liste des schémas accessibles, mais information_schema.SCHEMATA expose des colonnes de métadonnées supplémentaires — jeu de caractères par défaut, collation par défaut — et prend en charge le filtrage SQL complet avec WHERE, ORDER BY et JOIN. Utilisez SHOW DATABASES pour les vérifications interactives rapides et information_schema.SCHEMATA pour les requêtes scriptées ou analytiques.

Q : Comment lister les bases de données sur un serveur MySQL distant sans ouvrir de session interactive ?

A : Utilisez l’indicateur -e combiné aux options d’hôte et de port :

mysql -u root -p -h remote-host -P 3306 -e "SHOW DATABASES;" --skip-column-names

Q : Puis-je lister les bases de données MySQL sans connaître le mot de passe root ?

R : Sur un serveur local où vous disposez d’un accès Linux root, oui. Le plugin auth_socket de MySQL (ou unix_socket sur MariaDB) authentifie en fonction de l’utilisateur Linux du système d’exploitation. Exécutez sudo mysql et vous obtiendrez l’accès en tant qu’utilisateur MySQL root sans invite de mot de passe.

Q : SHOW DATABASES fonctionne-t-il de la même manière sur MariaDB que sur MySQL ?

R : La syntaxe est identique et les règles de portée des privilèges sont les mêmes. La principale différence pratique est que MariaDB peut ne pas inclure le schéma sys par défaut, et sur les nouvelles versions de MariaDB, le binaire client préféré est mariadb plutôt que mysql, bien que l’alias mysql soit généralement préservé pour la compatibilité.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer