Aller au contenu

MySQL : console (client mysql)

Le client mysql est la console de MySQL. Les exemples utilisent la base boutique et l’utilisateur app, créés dans les pages suivantes.

Fenêtre de terminal
sudo mysql # root local (auth_socket), sans mot de passe
mysql -u app -p boutique # utilisateur, mot de passe demandé, base choisie
mysql -u app -p -h 127.0.0.1 -P 3306 # via TCP
mysql -u app -p -h serveur.exemple.com # serveur distant

L’option -p seule demande le mot de passe de façon interactive : ne pas l’écrire dans la commande (-pmotdepasse), il resterait dans l’historique et la liste des processus.

Les instructions SQL se terminent par ;. Les commandes du client commencent par \ ou s’écrivent en toutes lettres.

Commande Rôle
SHOW DATABASES; Liste les bases
USE boutique; Choisit la base de travail
SHOW TABLES; Liste les tables de la base
DESCRIBE clients; Structure d’une table (alias : DESC)
SHOW CREATE TABLE clients\G Instruction de création complète
SELECT DATABASE(); Base courante
SELECT VERSION(); Version du serveur
SELECT CURRENT_USER(); Compte utilisé
STATUS; ou \s État de la connexion
SOURCE fichier.sql; ou \. fichier.sql Exécute un fichier SQL
\G à la fin d’une requête Affichage vertical (une ligne par champ)
\c Annule la requête en cours de saisie
\q, EXIT; ou Ctrl+d Quitte
help; ou \h Aide
SELECT * FROM clients LIMIT 2\G
Fenêtre de terminal
mysql -u app -p boutique -e "SELECT COUNT(*) FROM clients;" # une requête
mysql -u app -p boutique < script.sql # un fichier
mysql -u app -p boutique -e "SELECT nom, ville FROM clients" > clients.txt
Fenêtre de terminal
mysql -u app -p boutique -e "SELECT nom, email FROM clients" --batch # séparé par des tabulations
mysql -u app -p boutique -e "SELECT nom FROM clients" --batch --skip-column-names # sans en-tête (pour un script)
mysql -u app -p boutique -e "SELECT * FROM clients LIMIT 1" --vertical # affichage vertical
mysql -u app -p boutique -e "SELECT * FROM clients" --table # tableau, même hors terminal
pager less -S; -- défile horizontalement et verticalement
SELECT * FROM commandes;
nopager;
Fenêtre de terminal
cat > ~/.my.cnf <<'CONF'
[client]
user=app
password=<mot-de-passe>
CONF
chmod 600 ~/.my.cnf
Fenêtre de terminal
mysql_config_editor set --login-path=boutique --host=127.0.0.1 --user=app --password
mysql --login-path=boutique boutique
mysql_config_editor print --all # liste (mots de passe masqués)

Le mot de passe est enregistré obscurci dans ~/.mylogin.cnf, lisible seulement par l’utilisateur.

Dans ~/.my.cnf, section [mysql] :

[mysql]
prompt=\\u@\\h [\\d]>
auto-rehash
safe-updates
  • prompt : affiche utilisateur, hôte et base courante.
  • safe-updates : refuse les UPDATE et DELETE sans clause WHERE ou LIMIT, un filet de sécurité utile.
Symptôme Piste
ERROR 1045 Access denied Mauvais mot de passe ou utilisateur ; pour root, utiliser sudo mysql
ERROR 2002 Can't connect through socket Service arrêté, ou ajouter -h 127.0.0.1 pour passer par TCP
ERROR 1049 Unknown database Vérifier le nom avec SHOW DATABASES;
Caractères accentués illisibles Vérifier SHOW VARIABLES LIKE 'character_set%'; (utf8mb4 attendu) et le terminal en UTF-8