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 queroot. - Le binaire client
mysqlest disponible dans lePATHde votre shell (vérifiez avecwhich 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 mysqlPour les installations MariaDB, le nom du service diffère :
sudo systemctl status mariadbSi le service est arrêté, démarrez-le :
sudo systemctl start mysqlUn é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. Remplacezrootpar 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=YourSecurePasswordRestreignez immédiatement les permissions après la création du fichier :
chmod 600 ~/.my.cnfAvec 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éma | Objectif |
|---|---|
| — | — |
| `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/nullL’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"
doneUtiliser mysqlshow comme alternative
L’utilitaire mysqlshow fournit un aperçu rapide sans entrer dans le shell MySQL :
mysqlshow -u root -pIl 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_namePorté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.x | MariaDB 10.x |
|---|---|---|
| — | — | — |
| Syntaxe `SHOW DATABASES` | Prise en charge | Prise en charge |
| `information_schema.SCHEMATA` | Disponible | Disponible |
| Valeur par défaut `performance_schema` | Activé | Activé (10.5+) |
| Schéma `sys` | Inclus par défaut | Optionnel, pas toujours présent |
| `SHOW DATABASES LIKE` | Pris en charge | Pris en charge |
| Modèle de privilèges basé sur les rôles | Natif (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 rootCela 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.sockERROR 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énario | Commande 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ées | Interroger `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 passe | Fichier 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 sansSHOW DATABASESglobal 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
-ppour les sessions interactives et~/.my.cnfpour l’automatisation. information_schema.SCHEMATAest strictement plus puissant queSHOW DATABASESpour les requêtes scriptées ou filtrées.- L’utilitaire
mysqlshowest 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 clientmysqlpour 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-namesQ : 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é.
