Requêtes mysql en ligne de commande

Dans le cas où on ne souhaite pas exécuter une requête de manière interactive (en se connectant au serveur et en tapant la requête), mais qu’ on souhaite rendre scriptable, ou tout simplement exécuter, une requête depuis un shell, il existe plusieurs possibilités:

  • 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 ».

Laisser un commentaire

Your email address will not be published.