Lecture de MySQL Guide Officiel
Publi� le 5 février 2007

J'ai bien parcouru le livre puisque je suis arrivé quasimment à la fin.

Chapitre 9 - Importer et exporter des données

On voit qu'il y beaucoup de possibilités. Tout le monde connaît le classique mysqldump qui génère un fichier qui peut recréer entièrement la base de données avec ses tables, ses indexs et ses données. On a pas l'habitude d'utiliser l'option -tab qui génère un répertoire avec la commande SQL a exécuter pour créer la table et un fichier texte tabulé avec les données. Ce mode est le plus compact. Ces fichiers ne sont pas obligés de contenir tous les champs. On peut ne charger que les champs souhaités mais la table est vidée auparavant.

Les directives LOAD DATA INFILE et SELECT ... INTO OUTFILE travaillent elles aussi avec des fichiers texte tabulés. On peut modifier le séparateur de ligne, de champ et de chaîne de caractères. Ces directives sont plus rapides que l'exécution d'une ou plusieurs requêtes INSERT équivalentes. Elle permettent de lire des fichiers sur l'hôte client mais aussi sur l'hôte serveur (+rapide). Avec le mot clé IGNORE, les erreurs de chargement pour clés dupliquée sont ignorées sinon le chargement s'arrête à la 1ère erreur. Avec REPLACE les lignes dupliqués sont remplacées par les nouvelles données.

Chapitre 10 - Architecture de MySQL

Cela représente 15% des questions de l'examen. Il y a plusieurs clients :

-  mysql
-  mysqladmin
-  mysqlcc
-  perror [1]

Ainsi que des programmes tierces :

-  mysqlcheck [2]
-  mysqlisamcheck [3]

Un client peut se connecter en utilisant les fichiers de sockets (sous UNIX) ou les canaux nommés (sous Windows) [4]. Cela est plus rapide que d'utiliser TCP/IP. Sous UNIX lorsque l'on utilise localhost pour le serveur, on fait appel aux sockets. Pour utiliser TCP/IP il faut entrer l'adresse IP (127.0.0.1).

Avec le format MyISAM, chaque base de donnée est stockée dans un seul répertoire dans des fichiers. Le format INNODB utiliser en plus, son propre espace de table continu dans un ou +sieurs fichiers ou directement dans la partition. En ce qui concerne la mémoire, MySQL utiliser un thread par application cliente. Les threads se recyclent [5]. MySQL utilise plusieurs tampons mémoire pour enregistrer :

-  la table des droits
-  des blocs d'index
-  les descripteurs pour les tables ouvertes
-  les dernières requêtes
-  les noms d'hôtes
-  des informations sur les journaux employés par le moteur de stockage InnoDB

Les données de tables ne sont pas "cachées" car MySQL s'appuie sur les aptitudes du système d'exploitation. MySQL peut créer des tables temporaires en mémoire pour ses besoins à conditions qu'elles ne dépassent pas la valeur du paramètre tmp_table_size du fichier de configuration.

Il existent également des fichiers d'état (logs) :

-  journal général des requêtes
-  un journal binaire des requêtes exécutées [6]
-  le journal des requête lentes

C'est à cet endroit que l'on traite des moteurs de stockage de MySQL :

-  MyISAM le moteur par défaut. Il est très rapide à la lecture et supporte la recherche "full text". Le vérouillage s'applique aux tables uniquement
-  InnoDB est le moteur qui gère les transactions avec une compatibilité ACID, les clés étrangère et l'intégrité référentielle. Le vérouillage s'applique aux lignes
-  MERGE permet de dépasser les limitations du système de fichier pour les tables supérieures à 4Go
-  BDB est un format intermédiaire. Il supporte les transactions et utilise le vérouillage de page.
-  HEAP permet de stocker les données en mémoire. La structure reste sur le disque (fichier .frm).

On peut changer de moteur à la volée avec un ALTER TABLE.

Chapitre 11 - Installation et configuration de MySQL

MySQL propose plusieurs serveurs selon le fichier d'installation :

-  mysqld : le daemon de base
-  mysqld-nt : le service spécifique aux systèmes basés sur NT (incluant le support des canaux nommés)
-  mysqld-max : supporte le format de stockage BDB

Les options du serveur peuvent être spécifiés à la ligne de commande ou dans le fichier d'options (my.cnf). Sous Windows, à la différence d'UNIX, le serveur s'exécute en tant que service.

MySQL s'installe de différentes façons :

-  en utilisant un paquet .DEB ou RPM (la méthode la + rapide)
-  en décompactant un fichier .TAR
-  en utilisant l'installeur pour Windows
-  en recompilant le source (la plus lente mais on peut configurer le serveur comme on le souhaite)

Si on a utilisé une méthode par décompression ou recompilation, il est nécessaire de créer la base de donnée système mysql.


$ cd /usr/local/mysql
$ scripts/mysql_install_db

Sous UNIX, on peut lancer le serveur de plusieurs manières :

-  en lançant mysqld manuellement
-  mysqld_safe lance le serveur et le surveille en le redémarrant s'il s'arrête
-  mysql.server pour les systèmes Linux et Solaris
-  mysqld_multi qui est un script PERL

Sous Linux le serveur est configuré pour démarrer dès l'installation. Si on ne le souhaite pas, il faut désactiver le lancement du daemon au démarrage.


$ update-rc.d -f mysql remove

On démarrera le serveur à la main par la suite.


$ sudo /etc/init.d/mysql start

On utilise stop pour l'arrêter.

Pour mettre à niveau MySQL, c'est simple.

  1. On arrête le serveur
  2. On écrase les fichiers de MySQL avec la nouvelle version
  3. On redémarre le serveur

Il est possible d'optimiser le système d'exploitation en faveur de MySQL. S'il y a de nombreuses base de données et de tables on peut augmenter le nombre fichiers que le système peut ouvrir. Pour permettre à MySQL d'allouer plus de descripteur par processus, on utilise l'option —open-files-limit. La variable max_connections gère le nombre de clients simultanés. Si beaucoup de client se connectent par le réseau, on peut augmenter la valeur de la variable back_log.

Concernant les disques, un disque rapide améliore les performance de MySQL. C'est le temps de positionnement des têtes qui est important. Les disques RAID peuvent aider également. On peut répartir les fichiers sur plusieurs disques :

-  le serveur
-  les données (option —datadir)
-  les journaux
-  les fichiers temporaires (option —tmpdir)

On peut même placer les base de données sur différents disques grâce aux liens symboliques. Les systèmes de fichier (ext3, reiser) peuvent influer sur les performances d'une application. Il faut savoir que le format MyISAM est adapté pour un système de fichier en lecture seulement (CD-ROM). D'autres méthodes plus classiques fonctionnent, comme la vitesse du processeur (notamment s'il y en a plusieurs), la taille de la RAM, la vitesse du réseau et les performances des disques.

On arrive à la page 399.

Pages 1 | 2 | 3 | 4 | 5


[1] Permet d'afficher les libellés des erreurs se produisant dans le client mysql.

[2] Equivaut à CHECK ou OPTIMIZE ou REPAIR TABLE.

[3] Travaille directement sur les fichiers de base et requièrent que le serveur soit arrêté.

[4] Désactivés par défaut sous Windows. Pour les activer, il est nécessaire de lancer le serveur avec l'option —enable-named-pipe

[5] Quand il est libéré par un client il est rendu immédiatement disponible.

[6] Ce journal peut être lu grâce à l'utilitaire mysqlbinlog