Chapitre 4. Utiliser les programmes MySQL
Précédent |  | Suivant

## Chapitre 4. Utiliser les programmes MySQL

Ce chapitre présente les programmes fournis par MySQL AB et les options disponibles pour faire fonctionner ces programmes.

La plupart des programmes ont des options qui leur sont spécifiques, mais la syntaxe de spécifications des options est similaires pour tous les programmes. Les derniers chapitres fournissent des détails sur chaque programme, y compris leurs options.

## 4.1. Présentation des logiciels MySQL

MySQL AB fournit différents types de logiciels :

- Le serveur MYSQL et les scripts de démarrage :

  - `mysqld` est le serveur MySQL

  - `mysqld_safe`, `mysql.server` et `mysqld_multi` sont les scripts de démarrage.

  - `mysql_install_db` initialise le dossier de données et les premières bases.

  Ces logiciels sont présentés en détail dans la section Chapitre 5, Administration du serveur.

- Logiciels clietns pour accéder au serveur :

  - `mysql` est un client en ligne de commande, pour éxécuter des commandes SQL, interactivement, ou en mode batch.

  - `mysqlcc` (MySQL Control Center) est un client interactif graphique, pour exécuter des commandes SQL, et administrer le serveur

  - `mysqladmin` est un client d'administration

  - `mysqlcheck` effectue les opérations de maintenance sur les tables

  - `mysqldump` et `mysqlhotcopy` font les sauvegardes de bases

  - `mysqlimport` importe des fichiers de données

  - `mysqlshow` affiche des informations sur les bases et les tables

  Ces logiciels sont présentés en détails dans la section Chapitre 8, MySQL Scripts clients et utilitaires.

- Utilitaires qui fonctionnent indépendamment du serveur :

  - `myisamchk` effectue les opérations de maintenance des tables

  - `myisampack` produit des tables compressées, en lecture seule

  - `mysqlbinlog` est un outil pour traiter les fichiers de logs binaires

  - `perror` affiche le message associé à un code d'erreur

  `myisamchk` est présenté dans la section Chapitre 5, Administration du serveur. Les autres logiciels sont détaillés dans Chapitre 8, MySQL Scripts clients et utilitaires.

La plupart des distributions MySQL incluent tous ces programmes, hormis ceux qui sont spécifiques à une plate-forme. Par exemple, les scripts de démarrage du serveur ne sont pas utilisés sur Windows. L'exception est le format `RPM`, qui est plus spécialisé. Il y a des `RPM` pour le serveur, d'autres pour les clients. Si vous pensez qu'il vous en manque un, voyez la section Chapitre 2, Installer MySQL pour tout savoir sur les distributions et leur contenu. Il se peut alors que vous ayez un autre paquet à installer.

## 4.2. Appeler des programmes MySQL

Pour appeler un logiciel MySQL en ligne de commande (c'est à dire depuis un terminal), il suffit d'entrer le nom du programme, suivi d'options, et d'autres arguments, pour indiquer au programme ce que vous voulez faire. Les commandes suivantes montrent quelques appels simples. ```shell>`'' représente l'invite de commande de votre interprèteur : il ne fait pas partie de la commande elle-même. Les invites de commandes classiques sont `$` pour `sh` et `bash`, `%` pour `csh` et `tcsh`, et `C:\>` pour Windows `command.com` ou `cmd.exe`.

    shell> mysql test
    shell> mysqladmin extended-status variables
    shell> mysqlshow --help
    shell> mysqldump --user=root personnel

Les arguments qui commencent par un tiret sont des options. Ils spécifient généralement le type de connexion que le serveur doit faire, ou lui donne un mode opératoire spécial. La syntaxe des options est décrite dans la section Section 4.3, « Spécifier des options aux programmes ».

Les arguments (ceux qui ne commencent pas par un tiret), fournissent davantage d'informations au programme. Par exemple, `mysql` utilise le premier argument comme un nom de base de données : la commande `mysql test` indique que vous voulez utiliser la base de données `test`.

Les sections ultérieures décriront les programmes individuellement, avec leurs options spécifiques, et l'interprêtation qu'ils font des arguments.

Certaines options sont communes à un grand nombre de programmes. Les plus communes sont `--host`, `--user` et `--password` qui spécifient respectivement le nom d'hôte du serveur MySQL, le nom d'utilisateur et le mot de passe du compte. Tous les clients MySQL comprennent ces options : elles vous permettent d'indiquer sur quel serveur vous voulez travailler.

Vous pouvez avoir besoin d'appeler les logiciels MySQL en utilisant le chemin jusqu'au dossier `bin` dans lequel ils sont installé. Il est probable que dans ce cas, si vous rencontrez une erreur ```program not found''` lors de votre appel aux programmes hors du dossier `bin`. Pour rendre plus confortable l'utilisation de MySQL, vous pouvez ajouter le chemin vers `bin` dans votre variable d'environnement `PATH`. Puis, exécutez le programme en utilisant simplement son nom.

Consultez la documentation de votre interprèteur de ligne de commande pour savoir assigner la variable `PATH`. La syntaxe d'assignation des variables est spécifique à chaque terminal.

## 4.3. Spécifier des options aux programmes

Vous pouvez fournir des options aux programmes MySQL de différentes fa¸ons :

- En ligne de commande, après le nom du programme. C'est le plus courant pour les appels ponctuels du programme.

- Dans un fichier d'options, que le programme lit au démarrage. C'est le plus courant pour les programmes que vous voulez utiliser fréquemment.

- Dans les variables d'environnement. Ce sont des options pratiques si vous voulez les appliquer à chaque fois que vous lancez le programme, même si les fichiers d'options sont plus utilisés en pratique. (La section Section 5.10.2, « Utiliser plusieurs serveurs sous Unix » présente une situation où les variables d'environnement peuvent être très utiles. Elle décrit une situation où vous pouvez utiliser les variables pour spécifier le numéro de port TCP/IP et le fichier de socket Unix pour le client et le serveur).

Les programmes MySQL déterminent quelles options sont disponibles en examinant d'abord les variables d'environnement, puis le fichier d'options et enfin, la ligne de commande. Si une option est spécifiées plusieurs fois, la dernière occurence sera utilisée. Cela signifie que les variables d'environnement on la plus faible prioritée, et que les options de ligne de commande ont la forte priorité.

La meilleure technique consiste à stocker les options dans un fichier d'options. Vous pourrez alors éviter de saisir les options en ligne de commande, mais vous pourrez les remplacer par d'autres valeurs ponctuellement, en utilisant la ligne de commande.

### 4.3.1. Options de ligne de commande de `mysqld`

Les options des programmes spécifiées en ligne de commande suivent ces règles :

- Les options sont données après la commande.

- Une option commence avec un ou deux tirets, suivant que c'est un nom long ou court. De nombreuses options ont les deux formats. Par exemple, `-?` et `--help` sont les formes courtes et longues de l'option qui demande à un programme d'afficher le message d'aide.

- Les noms des options sont sensibles à la casse. `-v` et `-V` sont valides tous les deux, mais ont des significations différentes. Elles correspondent aux formes courtes des options `--verbose` et `--version`.

- Certains options prennent une valeur en argument, après le nom de l'option. Par exemple, `-h localhost` et `--host=localhost` indique au client MySQL le nom d'hôte du serveur à utiliser. La valeur de l'option est le nom de l'hôte à utiliser.

- Pour une option longue qui prend une valeur, séparez l'option de la valeur avec le signe égal (‘`=`’). Pour une option longue qui prend une valeur, séparez l'option de la valeur avec le signe espace. (`-hlocalhost` et `-h localhost` sont équivalents) Une exception à cette règle est l'option qui permet de spécifier le mot de passe MySQL. Cette option peut être donnée en format long comme `--password=pass_val` ou bien `--password`. Dans le dernier cas (sans mot de passe indiqué), le programme vous demandera interactivement un mot de passe. Le mot de passe peut aussi être configuré avec la forme courte `-ppass_val`, ou encore `-p`. Cependant, en forme courte, si le mot de passe est fourni, il doit suivre immédiatement la lettre, sans espace. La raison à cela est que le programme ne saura pas si l'argument suivant est le paramètre de l'option ou un autre argument. Par conséquent, les deux commandes suivantes ont deux significations très différente :

      shell> mysql -ptest
      shell> mysql -p test

  La première commande demande à `mysql` d'utiliser la valeur `test` comme mot de passe, mais ne spécifie pas de base de données par défaut. La seconde commande demande à `mysql` de demander le mot de passe à l'écran, et d'utiliser la base `test` comme base par défaut.

MySQL 4.0 a introduit une souplesse supplémentaire dans la manière de saisir des options. Ces modifications ont été ajoutée en MySQL 4.0.2. Certaines se rapportent à la fa¸on de spécifier qu'une option est ``activée'' ou ``désactivée'', et d'autres se rapportent aux options qui sont disponibles dans une version, mais pas dans l'autre. Ces fonctionnalités sont décrites ultérieurement dans cette section. Un autre changement se rapport à la méthode de spécifications des variables de programme. La section Section 4.3.4, « Utiliser les options pour configurer des variables de programme » présente en détails ce sujet.

Certaines options qui contrôlent le comportement du serveur peuvent être activées ou désactivées. Par exemple, le client `mysql` supporte l'option `--column-names` qui détermine si il faut afficher ou pas les noms des colonnes. Par défaut, cette option est activée. Cependant, vous pouvez la désactiver dans certaines situations, comme lorsque vous voulez envoyer le résultat de `mysql` dans un autre programme qui s'attend à ne recevoir que des données, et pas les entêtes.

Pour désactiver les nom des colonnes, vous pouvez spécifier l'option de trois manières différentes :

    --disable-column-names
    --skip-column-names
    --column-names=0

Les préfixes `--disable` et `--skip` et le suffixe `=0` ont tous le même effet : ils désactivent l'option.

La forme ``active'' de l'option peut être spécifiée de ces trois manières :

    --column-names
    --enable-column-names
    --column-names=1

Une autre modification au traitement des options, introduit en MySQL 4.0 est que vous pouvez utiliser le préfixe `--loose` pour les options de ligne de commande. Si une option est préfixée par `--loose`, le programme ne va pas se terminer avec une erreur, s'il ne reconnaît pas l'option, mais il va juste émettre une alerte :

    shell> mysql --loose-no-such-option
    mysql: WARNING: unknown option '--no-such-option'

Le préfixe `--loose` peut être utilise lorsque vous exécutez des programmes depuis plusieurs installations de MySQL sur la même machine : tout au moins, des serveurs aussi récents que la version 4.0.2. Ce préfixe est particulièrement utilise lorsque vous listes les options dans un fichier d'options. Une option peut ne pas être reconnue par une version du programme, avec le préfixe `--loose`, ou le préfixe `loose` dans un fichier d'options. Les versions du programme qui ne reconnaissent pas l'option émettront une alerte, mais ignoreront l'option. Cette stratégie requiert que les versions sont toutes en 4.0.2 ou plus récent, car les anciennes versions ne connaissent pas `--loose`.

### 4.3.2. Fichier d'options `my.cnf`

Les programmes MySQL peuvent lire des options de démarrage depuis un fichier d'options (aussi appelé fichier de configuration). Les fichiers d'options fournissent un moyen pratique de spécifier les options les plus courantes pour éviter de les saisir à chaque lancement du programme. Cette fonctionnalité est fournie depuis MySQL version 3.22.

Les programmes suivantes supportent les fichiers d'options : `myisamchk`, `myisampack`, `mysql`, `mysql.server`, `mysqladmin`, `mysqlbinlog`, `mysqlcc`, `mysqlcheck`, `mysqld_safe`, `mysqldump`, `mysqld`, `mysqlhotcopy`, `mysqlimport` et `mysqlshow`.

MySQL lit les fichiers d'options suivants sous Windows :

Fichier | Contenu
`WINDIR\my.ini` | Options globales
`C:\my.cnf` | Options globales

`WINDIR` représente votre dossier Windows. Il est généralement `C:\Windows` ou `C:\WinNT`. Vous pouvez déterminer sa localisation exacte à partir de la variable d'environnement `WINDIR` avec cette commande :

    C:\> echo %WINDIR%

MySQL lit les options par défaut dans les fichiers suivants sous Unix :

Fichier | Objet
`/etc/my.cnf` | Options globales
`DATADIR/my.cnf` | Options spécifiques au serveur
`defaults-extra-file` | Le fichier spécifié par `--defaults-extra-file=#`
`~/.my.cnf` | Options spécifiques à l'utilisateur

`DATADIR` est le dossier de données de MySQL (typiquement `/usr/local/mysql/data` pour les installation binaires ou `/usr/local/var` pour une installation source). Notez que c'est ce dossier qui a été spécifié au moment de la configuration et non pas le dossier de l'option `--datadir` lorsque `mysqld` démarre ! (`--datadir` n'a aucun effet sur le serveur, car le serveur recherche les données avant de traiter les options de ligne de commande).

MySQL essaie de lire les fichiers d'options dans l'ordre dans lequel ils sont présentés ci-dessus. Si un fichier d'options n'existe pas, vous pouvez le créer avec un éditeur de texte. Si des options sont spécifiées plusieurs fois, la dernière occurrence utilisée prend la préséance sur les options spécifiées avant.

Toutes les options longues qui peuvent être donnée en ligne de commande, peuvent être mises dans un fichier d'options. Pour avoir la liste des options d'un programme, utilisez la commande `--help`.

La syntaxe de spécification dans un fichier d'option est similaire celle de ligne de commande, hormis le fait que vous omettez les deux tirets initiaux. Par exemple, `--quick` et `--host=localhost` en ligne de commande deviennent `quick` et `host=localhost` dans un fichier d'options. Pour spécifier une option de la forme `--loose-opt_name` dans un fichier d'options, écrivez la sous la forme `loose-opt_name`.

Les lignes vides du fichier d'options sont ignorées. Un fichier d'options contient des lignes ayant la forme suivante :

- `#comment`, `;comment`

  Les lignes de commentaires commencent avec ‘`#`’ ou ‘`;`’. Depuis MySQL 4.0.14, un commentaire ‘`#`’ peut être ouvert au milieu de la ligne.

- `[group]`

  `group` est le nom du programme ou du groupe pour lequel vous souhaitez configurer des options. Après une ligne de groupe, toutes les `option` et `set-variable` s'appliqueront au groupe nommé, jusqu'à la fin du fichier d'option ou du démarrage d'un autre groupe.

- `opt_name`

  Ceci est équivalent à `--opt_name` sur la ligne de commande.

- `opt_name=value`

  Ceci est équivalent à `--opt_name=value` sur la ligne de commande. Dans un fichier d'options, vous pouvez mettre des espaces autour du caractère ‘`=`’, ce qui n'est pas vrai en ligne de commande. Depuis MySQL 4.0.16, vous pouvez mettre les valeurs des options entre guillemets simples ou doubles. C'est utile lorsqu'une valeur contient un début de commentaire ‘`#`’ ou des espaces.

- `set-variable = variable=value`

  Donne à la variable programme `var_name` sa valeur. Ceci est équivalent à `--set-variable variable=value` sur la ligne de commande. Cette syntaxe doit être utilisée pour spécifier la valeur d'une variable `mysqld`. Les espaces sont autorisés autour du premier caractère ‘`=`’ mais pas autour du second. Notez que `--set-variable` est obsolète depuis MySQL 4.0, utilisez simplement `--variable=value` comme tel. Voyez Section 4.3.4, « Utiliser les options pour configurer des variables de programme » pour plus d'informations sur la spécification des variables programme.

Les espaces initiaux et terminaux sont automatiquement effacés autour des noms d'options et de leur valeur. Vous pouvez utilisez les séquences spéciales ‘`\b`’, ‘`\t`’, ‘`\n`’, ‘`\r`’, ‘`\\`’ et ‘`\s`’ dans les valeurs des options pour représenter des effacement, tabulations, nouvelles lignes, retour chariot et espaces.

Sous Windows, si une valeur d'option représente un chemin de dossier, vous devez spécifier la valeur en utilisant ‘`/`’ plutôt que ‘`\`’ comme séparateur de dossiers. Si vous utilisez use ‘`\`’, vous devez le doubler ‘`\\`’, car ‘`\`’ est le caractère de protection de MySQL.

Si un groupe d'options est le même que le nom d'un programme, les options de ce groupe seront réservées à ce programme.

Le groupe d'options `[client]` est lu par tous les programmes clients et pas par le serveur `mysqld`. Cela vous permet de spécifier les options qui s'appliqueront à tous les clients. Par exemple, `[client]` est le groupe parfait pour spécifier le mot de passe que vous utilisez pour vous connecter au serveur. Mais assurez vous que le fichier est lisible et modifiable uniquement par vous-même pour que personne ne puisse découvrir votre mot de passe. Assurez vous de n'utiliser que des options qui seront reconnues par tous les programmes client. Les programmes qui ne comprennent pas une option vont afficher un message d'erreur lorsque vous les exécuterez.

Depuis MySQL 4.0.14, si vous voulez créer des groupes d'options qui ne doivent être lus que par une versions spécifique du serveur `mysqld`, vous pouvez le faire en utilisant des groupes avec des noms du type `[mysqld-4.0]`, `[mysqld-4.1]`, etc. Le groupe suivante indique que l'option `--new` soit utilisée avec les serveur de version 4.0.x :

    [mysqld-4.0]
    new

Voici un fichier d'options globales typique :

    [client]
    port=3306
    socket=/tmp/mysql.sock

    [mysqld]
    port=3306
    socket=/tmp/mysql.sock
    key_buffer_size=16M
    max_allowed_packet=8M

    [mysqldump]
    quick

Le fichier d'options ci-dessus utilise la syntaxe `var_name=value` pour les variables `key_buffer_size` et `max_allowed_packet`. Avant MySQL 4.0.2, vous auriez besoin d'utiliser la syntaxe `set-variable` à la place (comme présenté précédemment).

Voici un fichier d'options utilisateur classique :

    [client]
    # Le mot de passe suivant sera envoyé par tous les clients standards MySQL
    password="my_password"

    [mysql]
    no-auto-rehash
    set-variable = connect_timeout=2

    [mysqlhotcopy]
    interactive-timeout

Ce fichier d'options utilise la syntaxe `set-variable` pour spécifier la variable `connect_timeout`. Depuis MySQL 4.0.2, vous pouvez aussi configurer la variable avec `connect_timeout=2`.

Si vous avez une distribution source, vous trouverez des exemples de configuration dans les fichiers nommés `my-xxxx.cnf` dans le dossier `support-files`. Si vous avez une distribution binaire, regardez dans le dossier `DIR/support-files`, où `DIR` est le chemin de l'installation MySQL (typiquement `/usr/local/mysql`). Actuellement, il y a des exemples de configuration pour des systèmes petits, moyens, grands et très grands. Vous pouvez copier l'un des fichiers `my-xxxx.cnf` dans votre dossier utilisateur (renommez le fichier en `.my.cnf`) pour le tester.

Note : sous Windows, le fichier d'options `.cnf` peut ne pas afficher son extension.

Tous les programmes MySQL qui supportent les fichiers d'options gèrent les options suivantes de ligne de commande :

- `--no-defaults`

  N'utilise aucun fichier d'options.

- `--print-defaults`

  Affiche le nom du programme et toutes les options qui seront lues dans les fichiers d'options.

- `--defaults-file=path_name`

  Utilise uniquement le fichier d'options indiqué. `path_name` est le chemin complet pour y accéder.

- `--defaults-extra-file=path_name`

  Lit ce fichier d'options après le fichier d'options globales, et avant le fichier d'options utilisateurs. `path_name` est le chemin complet pour y accéder.

Pour fonctionner correctement, toutes ces options doivent immédiatement suivre le nom de la commande en ligne, hormis `--print-defaults` qui peut être utilisée juste après `--defaults-file` et `--defaults-extra-file`.

Dans les scripts Shell, vous pouvez utiliser le programme `my_print_defaults` pour analyser les fichiers d'options. L'exemple suivant montre le résultat que `my_print_defaults` peut produire lorsqu'on lui demande d'afficher les options des groupes `[client]` et `[mysql]` :

    shell> my_print_defaults client mysql
    --port=3306
    --socket=/tmp/mysql.sock
    --no-auto-rehash

Note pour les développeurs : la gestion des fichiers est implémentée en C dans la bibliothèque cliente simplement en traitant les options qui sont trouvées, (c'est à dire, les options du groupe appropriée), et avant les options de ligne de commande. Cela fonctionne correctement avec les programmes qui utilisent la dernière option des options spécifiées plusieurs fois. Mais si vous avez un programme C ou C++ qui gère les options de cette manière mais ne lit pas les fichiers d'options, vous aurez peut être à ajouter seulement deux lignes pour lui donner cette fonctionnalité. Voyez le code source des clients MySQL standard pour voir comment faire.

De nombreux autres langages s'interfacent avec MySQL grâce à la bibliothèque C, et certains fournissent un moyen d'accéder aux fichiers d'options. Cela inclut les langages Perl et Python. Voyez la documentation de votre interface favorite pour plus de détails.

### 4.3.3. Utiliser les variables d'environnement pour spécifier des options

Pour spécifier des options en utilisant des variables d'environnement, utilisez la commande d'affectation de votre système. Par exemple, sous Windows ou sous NetWare, vous pouvez utiliser la variable `USER` pour spécifier votre compte utilisateur. Utilisez cette syntaxe :

    SET USER=your_name

La syntaxe sous Unix dépend de votre Shell. Supposons que vous voulez spécifier le numéro de port TCP/IP en utilisant la variable `MYSQL_TCP_PORT`. La syntaxe Bourne Shell et ses variantes sont (`sh`, `bash`, `zsh`, etc.) est :

    MYSQL_TCP_PORT=3306

Pour `csh` et `tcsh`, utilisez cette syntaxe :

    setenv MYSQL_TCP_PORT 3306

Les commandes pour spécifier les variables d'environnement peuvent être exécutées à l'invite de commande, et prennent effet immédiatement. Ces configurations persistent jusqu'à votre déconnexion. Pour que ces configurations soient effectives lors de votre reconnexion, ajoutez les commandes appropriées dans votre fichier de démarrage. Typiquement, les fichiers de démarrage sont `AUTOEXEC.BAT` sous Windows, `.bash_profile` pour `bash`, ou `.tcshrc` pour `tcsh`. Consultez la documentation de votre interpréteur de ligne de commande pour les détails spécifiques.

La section Annexe E, Variables d'environnement liste toutes les variables d'environnement qui affectent le fonctionnement de MySQL.

### 4.3.4. Utiliser les options pour configurer des variables de programme

De nombreux programmes MySQL ont des variables internes, qui peuvent être modifiées durant l'exécution. Depuis MySQL version 4.0.2, les variables de programme peuvent être spécifiées de la même fa¸on que toute autre option qui prend une vlaeur. Par exemple, le client `mysql` utilise la variable `max_allowed_packet` qui contrôle la taille maximale du buffer de communication. Pour spécifier la variable `max_allowed_packet` de `mysql`, à une valeur de 16Mo, utilisez l'une de ces deux commandes :

    shell> mysql --max_allowed_packet=16777216
    shell> mysql --max_allowed_packet=16M

La première commande spécifie la valeur en octets. La seconde spécifie la valeur en méga-octets. Les valeurs des variables peuvent être suffixées par `K`, `M` ou `G` (majuscule ou minuscule), pour indiquer une unité de kilo-octets, mega-octets ou giga-octets.

Dans un fichier d'options, la configuration de la variable se fait sans les tirets initiaux :

    [mysql]
    max_allowed_packet=16777216

Ou :

    [mysql]
    max_allowed_packet=16M

Si vous voulez, les soulignés d'un nom de variable peuvent être spécfiés comme des tirets.

Avant MySQL 4.0.2, les noms de variables de programmes n'étaient pas reconnus comme des noms d'options. Au lieu de cela, il faut utiliser l'option `--set-variable` pour assigner une valeur :

    shell> mysql --set-variable=max_allowed_packet=16777216
    shell> mysql --set-variable=max_allowed_packet=16M

Dans un fichier d'options, omettez les tirets initiaux :

    [mysql]
    set-variable = max_allowed_packet=16777216

Ou :

    [mysql]
    set-variable = max_allowed_packet=16M

Avec `--set-variable`, les soulignés d'un nom de variable ne peuvent pas être spécifiés sous forme de tiret dans les versions de MySQL plus ancienne que la 4.0.2.

L'option `--set-variable` est toujours reconnue par MySQL versions 4.0.2 et plus récent, mais elle est obsolète.

Certaines variables serveurs peuvent être configurées durant l'exécution. Voyez la section Section 5.2.3.1, « Variables système dynamiques ».

This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

Précédent |  | Suivant
Chapitre 3. Tutoriels d'introduction | Sommaire | Chapitre 5. Administration du serveur