Requêtes mysql en ligne de commande

Il peut arriver que l’ on aie besoin d’ exécuter une requête en ligne de commande, de manière non-interactive (c’ est-à-dire sans avoir à se connecter au serveur, puis à taper la requête par exemple). Cela peut servir à rendre scriptable l’ exécution de la requête par exemple. Dans ce cas, ou pour tout simplement exécuter une requête depuis un shell, il existe plusieurs possibilités:

  • depuis le serveur mysql, si la requête est à taper ou à copier/coller directement sur la ligne de commande:
    $> mysql <base> -h <host> -u <user> -p<password> -e "requête"
    OU
    $> echo "requête" | mysql <base> -h <host> -u <user> -p<password>

    si la requête à exécuter est dans un fichier texte (nommé req.sql ici):

    $> mysql <base> -h <host> -u <user> -p<password> < req.sql

A titre informatif, la version avec l’option « -e » ci-dessus est la seule a formater la sortie dans un tableau ASCII avec des bordures. Voici un exemple de sortie:

+----+------------------------------------+
| id | adresse                            |
+----+------------------------------------+
|  2 | 31 Route La Font du Pin            |
|  3 | 18 bis Rue du Sudre                |
|  4 | 57 Rue Théodore Bellemer           |
...
+----+------------------------------------+

Les autres versions présentent la sortie de manière plus brute:

id      adresse
2       31 Route La Font du Pin
3       18 bis Rue du Sudre
4       57 Rue Théodore Bellemer
...

Accessoirement, pour récupérer le résultat de la requête dans un fichier (out.txt ici), il suffit de rajouter une redirection de la sortie:

$> mysql <base> -h <host> -u <user> -p<password> -e "requete" > out.txt

Pour exporter la sortie au format CSV, dans un fichier « /chemin/vers/out.csv » par exemple, il suffit d’ ajouter ce code à la fin de la requête:

[...] INTO OUTFILE '/chemin/vers/out.csv' FIELDS ENCLOSED BY '\"' TERMINATED BY ';' ESCAPED BY '\"' LINES TERMINATED BY '\r\n';

Il est possible que le serveur mySQL vous interdise cette possibilité s’il a été lancé avec l’option « –secure-file-priv ». Dans ce cas, il sera peut être nécessaire de vous y connecter de manière interactive et de lancer la requête suivante:

SHOW VARIABLES LIKE "secure_file_priv";

Le résultat vous montrera les chemins autorisés pour les exports de fichier, dans mon cas, j’ai obtenu:

+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

Donc, le « /chemin/vers/out.csv » au-dessus, doit être remplacé par « /var/lib/mysql-files/out.csv ».

  • Si on n’ est pas sur le serveur mysql, mais qu’ on y possède un accès via ssh:
    ssh <login@serveur.mysql.domaine> "mysql <base> -h <host> -u <user> -p<password> -e 'requete'"

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.