Quand on doit intervenir sur plusieurs serveurs simultanément (par exemple pour réparer une réplication qui s’est plantée), il est pratique d’avoir une console ouverte sur chaque serveur. Personnellement, j’aime bien utiliser Terminator, qui évite les problèmes de chevauchement de fenêtres quand plusieurs sessions sont ouvertes en parallèle. Seul petit hic : toutes les consoles affichent la même invite (mysql> ), il n’est donc pas toujours évident de savoir sur quel serveur on se trouve, ce qui augmente le risque de fâcheuse mauvaise manip. Heureusement il est possible de modifier facilement le prompt du client en ligne de commande mysql, c’est ce que je vous propose de découvrir aujourd’hui.
Quand vous ouvrez une console, le prompt est par défaut :
mysql>
Pour le modifier, une première possibilité consiste à utiliser la commande prompt (ou son équivalent \R) suivie d’une ou plusieurs options. Exemple :
mysql> prompt \u\h
PROMPT set to '\u\h'
rootlocalhost
Ce premier exemple permet d’indiquer l’utilisateur connecté ainsi que la machine. C’est déjà intéressant, mais pas très lisible, puisque tout est collé. Heureusement vous pouvez ajouter n’importe quels caractères pour séparer les différents champs du prompt. Il sera donc plus lisible de saisir le prompt suivant :
rootlocalhostprompt \u@\h>
PROMPT set to '\u@\h> '
root@localhost>
Notez l’espace après le >, bien pratique pour séparer le prompt des commandes que vous allez saisir.
Parmi les options très utiles du prompt, en plus de \u et \h, vous avez \v (version du serveur) et \d (base sélectionnée). Les options disponibles sont nombreuses et si vous souhaitez en avoir la liste complète, le mieux est de regarder dans la page de man consacrée à mysql ou de consulter la documentation en ligne.
Est-il possible de faire en sorte qu’une telle modification du prompt soit permanente ? Oui ! Et pour cela, il existe plusieurs solutions. La première consiste à enregistrer le prompt dans la variable MYSQL_PS1 :
$ export MYSQL_PS1="\u@\h \d > "
$ mysql -uroot -p
root@localhost (none) >
La seconde solution consiste à saisir le prompt dans la section [mysql] du fichier my.cnf ou my.ini. Dans ce cas, vous devrez penser à doubler les backslash :
[mysql]
prompt = "\\u@\\h \\d > "
Si vous êtes sous Linux, vous pouvez également placer ce même code dans le fichier .my.cnf (dans le HOME de votre utilisateur). Cette solution est intéressante car elle permet d’obtenir le résultat voulu sans avoir à modifier le fichier global my.cnf, pour lequel vous n’aurez pas nécessairement les droits de modification.
Notez que si vous êtes un utilisateur de MySQL Sandbox, le prompt sera automatiquement et intelligemment modifié pour que vous ne soyez pas perdu parmi toutes vos instances. Par exemple, j’obtiens le prompt suivant en me connectant sur un des nœuds d’une paire master-master :
$ ./n1
node1 [localhost] {msandbox} ((none)) >
Maintenant, vous n’aurez plus d’excuse si vous vous trompez de console … !
Fort intéressant comme sujet, je ne m’étais jamais penché dessus (par manque de temps surtout) … Mais gérant plusieurs dizaines de serveur MySQL, je pense que cela m’enlèvera une épine du pied et évitera les petits (voir gros) tracas.
Modifier le prompt du client mysql…
Encore un billet de qualité sur dbnewz.com sur la personnalisation du prompt de Mysql….