MySQL Scripts clients et utilitaires
<<<
Commandes mysql Comment exécuter des commandes SQL depuis un fichier texte
>>>

8.3 mysql , l'outil en ligne de commande
8 MySQL Scripts clients et utilitaires
 Manuel de Référence MySQL 4.1 : Version Française

->Commandes mysql
Comment exécuter des commandes SQL depuis un fichier texte
Conseils avec mysql

8.3.1 Commandes mysql

mysql envoie des requêtes SQL que vous avez saisie au serveur, pour exécution. Il y a aussi des commandes que le client mysql interprête. Si vous tapez ' help ' en ligne de commande, mysql va afficher les commandes qu'il supporte :


mysql> help

MySQL commands:
?         (\h)    Synonym for `help'.
clear     (\c)    Clear command.
connect   (\r)    Reconnect to the server.
                  Optional arguments are db and host.
delimiter (\d)    Set query delimiter.
edit      (\e)    Edit command with $EDITOR.
ego       (\G)    Send command to mysql server,
                  display result vertically.
exit      (\q)    Exit mysql. Same as quit.
go        (\g)    Send command to mysql server.
help      (\h)    Display this help.
nopager   (\n)    Disable pager, print to stdout.
notee     (\t)    Don't write into outfile.
pager     (\P)    Set PAGER [to_pager].
                  Print the query results via PAGER.
print     (\p)    Print current command.
prompt    (\R)    Change your mysql prompt.
quit      (\q)    Quit mysql.
rehash    (\#)    Rebuild completion hash.
source    (\.)    Execute an SQL script file.
                  Takes a file name as an argument.
status    (\s)    Get status information from the server.
system    (\!)    Execute a system shell command.
tee       (\T)    Set outfile [to_outfile].
                  Append everything into given outfile.
use       (\u)    Use another database.
                  Takes database name as argument.
Les commandes edit , nopager , pager et system ne fonctionnent que sous Unix.

La commande status donne des détails sur la connexion et le serveur utilisés. Si vous fonctionnez en mode --safe-updates , status va aussi afficher les valeurs des variables de mysql qui affectent vos requêtes.

Pour enregistrer les requêtes et leur résultat, utilisez la commande tee . Toutes les données affichées à l'écran seront ajoutées à un fichier donné. Cela peut être très pratique pour déboguer. Vous pouvez activer cette fonctionnalité en ligne de commande, avec l'option --tee , ou interactivement avec la commande tee . Le fichier tee peut être désactivé interactivement avec la commande notee . Exécuter tee à nouveau ré-active le log. Sans paramètre, le fichier précédent sera utilisé. Notez que tee envoie les requêtes dans le fichier après chaque commande, juste avant que mysql ne l'affiche.

La lecture et la recherche dans les résultats de requêtes en mode interactif est possible en utilisant les programmes Unix less , more , ou tout autre programme similaire, avec l'option --pager . Si vous ne spécifier par de valeur d'option, mysql regarde la valeur de la variable d'environnement PAGER , et utilise ce pager. Vous pouvez aussi l'activer interactivement avec la commande pager et la désactiver avec nopager . La commande prend un argument optionnel : s'il est fournit, le programme de pager indiqué sera utilisé. Sinon, le pager sera celui indiqué en ligne de commande, ou stdout si aucun pager n'était indiqué.

La pagination de sortie ne fonctionne que sous Unix, car elle utilise la fonction popen() , qui n'existe pas sous Windows. Pour Windows, la commande tee peut être utilisée pour sauver le résultat, même si ce n,est pas aussi pratique que pager pour naviguer dans le résultat.

Quelques conseils avec la commande pager :

  • Vous pouvez l'utiliser pour écrire les résultats dans un fichier :
    
    mysql> pager cat > /tmp/log.txt
    
    Vous pouvez lui passer les options que le page comprendra :
    
    mysql> pager less -n -i -S
    
  • Dans le précédent exemple, notez l'option -S . Vous la trouverez pratique pour naviguer dans des résultats très larges. Parfois, un résultat très large est difficile à lire à l'écran. L'option -S de less rend le résultat plus lisible, car vous pouvez aussi scroller horizontalement, avec les flèches de droite et de gauche. Vous pouvez aussi utiliser interactivement -S dans less pour activer ou désactiver la navigation horizontale. Pour plus d'informations, voyez le manuel de less :
    
    shell> man less
    
  • Vous pouvez spécifier des commandes de pages très complexe :
    
    mysql> pager cat | tee /dr1/tmp/res.txt \
              | tee /dr2/tmp/res2.txt | less -n -i -S
    Dans cet exemple, la commande va envoyer les résultats de la commande dans deux fichiers différents, dans deux dossiers différents, placés sur deux devis /dr1 et /dr2 , mais affichera toujours le résultat à l'écran via less .
Vous pouvez aussi combiner les deux fonctions ci-dessus : activer le tee , spécifier le pager ' less ' et vous serez capable de naviguer dans les résultats avec le less Unix, tout en enregistrant tous les résultats dans un fichier. La différence entre le tee d'Unix utilisé avec le pager et le tee intégré du client mysql , est que le tee intégré fonctionne même si vous n'avez pas de tee Unix disponible. Le tee enregistre tout ce qui est affiché à l'écran, alors que le tee Unix utilisé avec pager n'en note pas autant. Enfin, le tee interactif est plus facile à activer et désactiver, lorsque vous souhaitez enregistrer un résultat dans un fichier, mais que vous voulez désactiver cette fonctionnalité à d'autres moments.

Depuis MySQL version 4.0.2, il est possible de modifier l'invite de commande de mysql . La chaîne de définition de l'invite de commande accepte les séquences suivantes :

Option Description
\v version de mysqld
\d database en cours
\h hôte MySQL
\p port de connexion
\u nom d'utilisateur
\U Identifiant complet username@host
\\ '\'
\n nouvelle ligne
\t tabulation
\ espace
\_ espace
\R heure 24h (0-23)
\r heure 12h (1-12)
\m minutes
\y année sur deux chiffres
\Y année sur quatre chiffres
\D format de date complet
\s secondes
\w jour de la semaine en trois lettres (Mon, Tue, ...)
\P am/pm
\o mois au format numérique
\O mois en trois lettres (Jan, Feb, ...)
\c compteur du nombre de commande

'\' suivi de n'importe quelle lettre représente la lettre littéralement.

Si vous spécifiez une commande prompt sans argument, mysql utilisera l'invite de commande par défaut de mysql> .

Vous pouvez modifier l'invite de commande comme ceci :

  • Variable d'environnement Vous pouvez utiliser la variable d'environnement MYSQL_PS1 , en lui donnant la chaîne d'invite. Par exemple :
    
    shell> export MYSQL_PS1="(\u@\h) [\d]> "
    
  • Utiliser le fichier d'optionsVous pouvez configurer l'invite de commandes prompt dans le fichier d'options MySQL, comme /etc/my.cnf ou .my.cnf , dans le groupe mysql . Par exemple :
    
    [mysql]
    prompt=(\\u@\\h) [\\d]>\\_
    Dans cet exemple, notez que les anti-slash sont doublés. Si vous configurez l'invite de commande prompt dans un fichier d'options, il est recommandé de doubler les anti-slash, lorsque vous utilisez des options. Il y a des recoupements entre les séquences protégées et les options. Ces séquences sont listées dans Utiliser les fichiers d'options . Ce recoupement peut vous causer des problèmes avec des anti-slashs uniques. Par exemple, \s sera interprété comme un espace, plutôt que comme le nombre de secondes. La valeur suivante montre comment définir une invite avec l'heure au format HH:MM:SS> :
    
    [mysql]
    prompt="\\r:\\m:\\s> "
  • Utilisez une option de ligne de commande

    Vous pouvez utiliser l'option --prompt dans la commande mysql . Par exemple :

    
    shell> mysql --prompt="(\u@\h) [\d]> "
    (user@host) [database]>
  • Interactivement

    Vous pouvez aussi utiliser la commande prompt (ou \R ) depuis le client pour modifier interactivement l'invite de commande. Par exemple :

    
    mysql> prompt (\u@\h) [\d]>\_
    PROMPT set to '(\u@\h) [\d]>\_'
    (user@host) [database]>
    (user@host) [database]> prompt
    Returning to default PROMPT of mysql>
    mysql>

<< Commandes mysql >>
MySQL Scripts clients et utilitaires mysql , l'outil en ligne de commande Comment exécuter des commandes SQL depuis un fichier texte