Table des matières
Le logiciel MySQL (TM) est un serveur de base de
données SQL très rapide, multi-threadé,
multi-utilisateur et robuste. Le serveur MySQL est destiné aux
missions stratégiques et aux systèmes de production à forte
charge, ainsi qu'à l'intégration dans des logiciels déployés à
grande échelle. MySQL est une marque déposée de MySQL
AB.
Le logiciel MySQL dispose de deux licenses. Les
utilisateurs peuvent choisir entre utiliser MySQL comme un logiciel
Open Source/Logiciel libre,
sous les termes de la licence GNU General Public
License
(http://www.gnu.org/licenses/)
ou bien, ils peuvent acheter une licence commerciale auprès de
MySQL AB. Voyez
http://www.mysql.com/company/legal/licensing/
pour plus d'informations sur les licences.
Le site web de MySQL (http://www.mysql.com/) fournit les dernières informations sur le serveur MySQL.
La liste suivante décrit les sections particulières de ce manuel :
Pour une présentation des capacités de serveur de
base de données MySQL, voyez
Section 1.2.2, « Les fonctionnalités principales de MySQL ».
Pour les instructions d'installation, voyez Chapitre 2, Installer MySQL.
Pour des conseils sur le port du serveur de base de
données MySQL sur de nouvelles architectures ou
systèmes d'exploitation, voyez Annexe D, Port vers d'autres systèmes.
Pour des informations sur la mise à jour vers la version 4.0, voyez Section 2.6.2, « Passer de la version 4.0 à la version 4.1 ».
Pour des informations sur la mise à jour vers la version 3.23, voyez Section 2.6.3, « Passer de la version 3.23 à la version 4.0 ».
Pour des informations sur la mise à jour vers la version 3.22, voyez Section 2.6.4, « Passer de la version 3.22 à la version 3.23 ».
Pour une introduction au serveur de base de données
MySQL, voyez Chapitre 3, Tutoriels d'introduction.
Pour des exemples de SQL et des tests de
performances, voyez le dossier de tests
(sql-bench de la distribution.
Pour connaître l'historique des fonctionnalités et bogues, voyez Annexe C, Historique des changements MySQL.
Pour une liste des bogues connus et des limitations, voyez Section 1.5.7, « Erreurs connues, et limitations de MySQL ».
Pour les plans de développement, voyez Section B.8, « Les évolutions de MySQL (la liste des tâches) ».
Pour une liste de tous les contributeurs à ce projet, voyez Annexe B, Crédits.
Important :
Les rapports d'erreurs (aussi appelés bogues), ainsi que les questions et commentaires, doivent être envoyés à la liste de diffusion générale. See Section 1.4.1.1, « Les listes de diffusion de MySQL ». See Section 1.4.1.3, « Comment rapporter un bogue ou un problème ».
Le script mysqlbug doit être utilisé pour
générer le rapport de bogues. (Les distributions Windows
contiennent un fichier mysqlbug.txt dans le
dossier racine qui peut être utilisé comme formulaire pour un
rapport de bug).
Pour les distributions sources, le script
mysqlbug est accessible dans le dossier
scripts. Pour les distributions binaires,
mysqlbug est installé dans le dossier
bin (/usr/bin pour le
paquet RPM du serveur MySQL).
Si vous avez trouvé un problème de sécurité critique dans le
code du serveur MySQL, vous devez envoyez un
email à <security@mysql.com>.
Ceci est le manuel de référence de MySQL; il documente MySQL
jusqu'à la version 5.0.6-beta. Les évolutions fonctionnelles
sont toujours indiquées avec une référence à la version
d'évolution, de manière à ce que ce manuel soit toujours
valable, même si vous utilisez une ancienne version de MySQL.
Etant un manuel de référence, il ne fournit aucune description
générale sur le langage SQL ou les concepts
de bases de données relationnelles.
Comme le logiciel de base de données MySQL est
en développement constant, ce manuel es mis à jour fréquemment.
La version la plus récente est disponibles à
http://dev.mysql.com/doc/
en différents formats, incluant HTML, PDF et Windows HLP.
L'original du document est un fichier au format Texinfo. La
version HTML est produite automatiquement avec une version
modifiée de texi2html. La version en texte
plein et version Info sont produites par
makeinfo. La version PostScript est produite
avec texi2dvi et dvips. La
version PDF est produite avec pdftex.
Si vous avez du mal à trouver des informations dans ce manuel, vous pouvez essayer notre version avec moteur de recherche, sur notre site web : http://www.mysql.com/doc/.
Si vous avez des suggestions concernant des ajouts ou des
corrections à ce manuel, vous pouvez les envoyez à l'équipe de
documentation à <docs@mysql.com>.
Ce manuel a été écrit initialement par David Axmark et Michael ``Monty'' Widenius. Il est actuellement entretenu par l'équipe de documentation MySQL, constituée de Paul DuBois, Stefan Hinz, Mike Hillyer, Jon Stephens et Russell Dyer. Pour les autres contributeurs, voyez les Annexe B, Crédits.
La traduction de ce manuel a été faite sous la direction de Damien Séguy. Mehdi Achour, Patrick Haond, David Manusset, Sylvain Maugiron, Guillaume Plessis et Yannick Torres ont contribué largement à cette traduction.
Le copyright (2002-2006) de ce manuel est la propriété de la
société suédoise MySQL AB.
Ce manuel utilise certaines conventions typographiques :
constant
La police à largeur fixe est utilisée pour les noms de
commandes et les options, les requêtes SQL, les noms de
bases de données, de tables et de colonnes, le code C et
Perl, les variables d'environnement. Par exemple, ``Pour
voir comment mysqladmin fonctionne,
exécutez-le avec l'option --help.''
filename
La police à largeur fixe avec des guillemets d'encadrement
indique des noms de fichiers et de chemins de dossiers. Par
exemple : ``La distribution est installée dans le dossier
/usr/local/.''
‘c’
La police à largeur fixe avec des guillemets d'encadrement
est aussi utilisée pour indiquer des séquences de
caractères. Par exemple : ``Pour spécifier un caractère
joker, utilisez le caractère
‘%’.''
italique
Les polices en italique sont utilisées pour attirer l'attention, comme ceci.
gras
Le gras est utilisé pour les entêtes de tables, et aussi pour attirer fortement votre attention.
Lorsque les commandes qui sont affichées sont destinées à
être exécutées par un programme particulier, le nom du
programme est indiqué dans l'invite de la commande. Par
exemple, shell> indique une commande que
vous exécutez depuis votre console Shell, et
mysql> indique une commande que vous
exécutez depuis le client mysql :
shell>tapez une commande shell icimysql>tapez une requête SQL ici
Le ``Shell'' est votre interpréteur de ligne de commande. Sous
Unix, c'est typiquement un programme comme sh
ou csh. Sous Windows, le programme
équivalent est command.com ou
cmd.exe, typiquement utilisée en console.
Lorsque vous saisissez une commande dans un exemple, omettez simplement de saisir l'invite de commande affichée.
Souvent, les noms de bases de données, tables ou colonnes
doivent être remplacés dans les commandes. Pour indiquer
qu'une telle substitution est nécessaire, ce manuel utilise les
noms de nom_de_base,
nom_de_table et
nom_colonne. Par exemple, vous pourriez avoir
une requête comme ceci :
mysql> SELECT nom_colonne FROM nom_de_base.nom_de_table;
Cela signifie que si vous devez saisir une requête semblable, vous devriez utiliser votre propre nom de colonne, table et base de données, ce qui pourrait se traduire par ceci :
mysql> SELECT author_name FROM biblio_db.author_list;
Les mot réservés SQL ne sont pas sensibles à la casse, et peuvent être écrits en majuscules ou minuscules. Ce manuel utilise les majuscules.
Dans les illustrations de syntaxe, les crochets
(‘[’ et
‘]’) sont utilisés pour indiquer
des clauses ou mots optionnels. Par exemple, dans la requête
suivante, IF EXISTS est optionnel :
DROP TABLE [IF EXISTS] nom_de_table
Lorsqu'un élément de syntaxe est constitué d'un certain
nombre d'alternatives, les alternatives sont séparées par des
barres verticales (‘|’).
Lorsqu'un membre d'un tel jeu de possibilités
peut être choisi, les alternatives sont
listées entre crochets (‘[’ et
‘]’) :
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
Lorsqu'un élément d'un jeu de possibilités
doit être choisi, les alternatives sont
placées entre accolades (‘{’ et
‘}’) :
{DESCRIBE | DESC} nom_de_table {nom_colonne | wild}
Des crochets peuvent aussi indiquer que l'élément syntaxique
précédent peut être répété. Dans l'exemple suivant,
plusieurs valeurs reset_option peuvent être
donnés, séparées par des virgules :
RESET reset_option [,reset_option] ...
Les commandes d'assignation des variables de Shell sont présentées avec la syntaxe Bourne Shell. Par exemple, la syntaxe suivante modifie une variable d'environnement :
shell> VARNAME=value some_command
Si vous utilisez csh ou
tcsh, vous devez utiliser une syntaxe
légèrement différente. Il faut écrire :
shell>setenv VARNAME valueshell>some_command
MySQL, le plus populaire des serveurs de bases de données SQL
Open Source, est développé, distribué et
supporté par MySQL AB. MySQL
AB est une société commerciale, fondée par les
développeurs de MySQL, qui développent leur activité en
fournissant des services autour de MySQL.
Le site web de MySQL
(http://www.mysql.com/)
fournit les toutes dernières actualités sur le logiciel MySQL et
sur la société MySQL AB.
MySQL est un système de gestion de bases de données.
Une base de données est un ensemble organisé de données. Cela peut aller d'une simple liste de courses au supermarché à une galerie de photos, ou encore les grands systèmes d'informations des multi-nationales. Pour ajouter, lire et traiter des données dans une base de données, vous avez besoin d'un système de gestion de bases de données tel que le serveur MySQL. Comme les ordinateurs sont très bons à manipuler de grandes quantités de données, le système de gestion de bases de données joue un rôle central en informatique, aussi bien en tant qu'application à part entière, qu'intégré dans d'autres logiciels.
MySQL est un serveur de bases de données relationnelles.
Un serveur de bases de données stocke les données dans des
tables séparées plutôt que de tout rassembler dans une
seule table. Cela améliore la rapidité et la souplesse de
l'ensemble. Les tables sont reliées par des relations
définies, qui rendent possible la combinaison de données
entre plusieurs tables durant une requête. Le
SQL dans ``MySQL'' signifie
``Structured Query Language'' : le langage
standard pour les traitements de bases de données.
MySQL est Open Source.
Open Source (Standard Ouvert) signifie
qu'il est possible à chacun d'utiliser et de modifier le
logiciel. Tout le monde peut télécharger MySQL sur Internet,
et l'utiliser sans payer aucun droit. Toute personne en ayant
la volonté peut étudier et modifier le code source pour
l'adapter à ses besoins propres. Le logiciel MySQL utilise la
licence GPL (GNU General Public
License),
http://www.gnu.org/licenses/,
pour définir ce que vous pouvez et ne pouvez pas faire avec
ce logiciel, dans différentes situations. Si vous ne vous
sentez pas confortable avec la licence GPL
ou bien que vous devez intégrer MySQL dans une application
commerciale, vous pouvez acheter une licence commerciale
auprès de MySQL AB.
Le serveur de bases de données MySQL est
très rapide, fiable
et facile à utiliser
Si c'est ce que vous recherchez, vous devriez faire un essai.
Le serveur de bases de données MySQL dispose aussi de
fonctionnalités pratiques, développées en coopération avec
nos utilisateurs. Vous pouvez trouver une comparaison des
performances du serveur MySQL avec d'autres
systèmes de bases de données dans nos pages de tests de
performances. See Section 7.1.4, « La suite de tests MySQL ».
Le serveur MySQL a été développé à
l'origine pour gérer de grandes bases de données plus
rapidement que les solutions existantes, et a été utilisé
avec succès dans des environnements de production très
contraints et très exigeants, depuis plusieurs années. Bien
que toujours en développement, le Le serveur
MySQL offre des fonctions nombreuses et puissantes.
Ses possibilités de connexions, sa rapidité et sa sécurité
font du serveur MySQL une serveur hautement
adapté à Internet.
MySQL Server fonctionne en mode client/serveur ou en
système embarqué.
Le serveur MySQL est un système client / serveur qui est constitué d'un serveur SQL multi-threadé qui supporte différentes interfaces, clients, bibliothèques et outils d'administration, ainsi qu'une large gamme de pilotes pour différents langages (API).
Nous proposons aussi le serveur MySQL comme une bibliothèque embarquée, que vous pouvez intégrer dans vos applications pour en faire des produits plus petits, plus rapides et plus simples à utiliser.
Il existe un grand nombre de contributions à MySQL.
Il est très probable que vous pourrez trouver votre éditeur
préféré ou que votre environnement de programmation
supporte déjà le serveur de base de données
MySQL.
La prononciation officielle de MySQL est ``My Ess Que
Ell'' (en anglais), ce qui donne ``Maille Esse
Cu Elle'' en phonétique fran¸aise. Evitez d'utiliser
la prononciation ``my sequel'', mais nous ne nous formaliserons
pas que vous utilisiez ``my sequel'' (ma
séquelle, en fran¸ais) ou une autre prononciation adaptée.
Nous avons débuté avec l'intention d'utiliser
mSQL pour se connecter à nos tables en
utilisant nos propres routines bas niveau ISAM. Cependant,
après quelques tests, nous sommes arrivés à la conclusion que
mSQL n'était pas assez rapide et flexible
pour nos besoins. Cela nous a conduit à créer une nouvelle
interface SQL pour notre base de données, mais en gardant la
même API que mSQL. Cette API a été choisie
pour la facilité de port des programmes de tiers.
Les liens avec le nom MySQL ne sont pas parfaitement établis. Notre dossier de base et un grand nombre de bibliothèques et outils étaient préfixés par ``my'' depuis plus de 10 ans. Mais la fille de Monty, plus jeune que lui, était aussi appelée My. Lequel des deux a conduit au nom de MySQL est toujours un mystère, même pour nous.
Le nom du dauphin MySQL (notre logo) est
Sakila, qui a été choisi par les fondateurs
de MySQL AB à partir d'une grande liste de noms suggérés par
les utilisateurs dans le concours "Name the
Dolphin" ("Nommez le dauphin"). Le nom a été
suggéré par Ambrose Twebaze, un développeur de logiciels
libres au Swaziland, en Afrique. D'après Ambrose, le nom Sakila
puise ses origines du SiSwati, la langue locale du Swaziland.
Sakila est aussi le nom d'une ville en Arusha, Tanzanie, près
du pays d'origine d'Ambrose, Uganda.
La liste suivante décrit les caractéristiques principales du
logiciel de bases de données MySQL. Voyez la
Section 1.3, « Plan de développement de MySQL » pour plus d'informations sur les
fonctionnalités courantes et à venir.
Interne et portabilité
Ecrit en C et C++.
Testé sur un large éventail de compilateurs différents.
Fonctionne sur de nombreuses plates-formes. See Section 2.1.1, « Systèmes d'exploitation supportés par MySQL ».
Utilise GNU Automake, Autoconf et Libtool pour une meilleure portabilité.
Dispose d'API pour C, C++, Eiffel, Java, Perl, PHP, Python, Ruby et Tcl. See Chapitre 24, API MySQL.
Complètement multi-threadé, grâce aux threads du noyau. Cela signifie que vous pouvez l'utiliser facilement sur un serveur avec plusieurs processeurs.
Fournit des moteurs de tables transactionnels et non-transactionnels.
Index B-tree très rapide, avec
compression d'index.
Facilité relative à ajouter un nouveau moteur de table. C'est utile si vous voulez ajouter une interface SQL à votre base de donnée maison.
Système l'allocation mémoire très rapide, exploitant les threads.
Jointures très rapides, exploitant un système de jointures multiples en une seule passe optimisée.
Tables en mémoire, pour réaliser des tables temporaires.
Les fonctions SQL sont implémentées grâce à une bibliothèque de classes optimisées, qui sont aussi rapides que possible! Généralement, il n'y a aucune allocation mémoire une fois que la requête a été initialisée.
Le code de MySQL est vérifié avec
Purify (un utilitaire de détection
des fuites mémoires commercial) ainsi qu'avec
Valgrind, un outil GPL
(http://developer.kde.org/~sewardj/).
Types de colonnes
Nombreux types de colonnes : entiers signés ou non,
de 1, 2, 3, 4, et 8 octets, FLOAT,
DOUBLE, CHAR,
VARCHAR, TEXT,
BLOB, DATE,
TIME, DATETIME,
TIMESTAMP, YEAR,
SET et ENUM. See
Chapitre 11, Types de colonnes.
Enregistrements de taille fixe ou variable.
Toutes les colonnes ont des valeurs par défaut. Vous
pouvez utiliser la commande INSERT
pour insérer un sous ensemble de colonnes : les
colonnes qui ne sont pas explicitement cités prennent
alors leur valeur par défaut.
Commandes et fonctions
Support complet des opérateurs et fonctions dans la
commande SELECT et la clause
WHERE. Par exemple :
mysql>SELECT CONCAT(first_name, " ", last_name)->FROM tbl_name->WHERE income/dependents > 10000 AND age > 30;
Support complet des clauses SQL GROUP
BY et ORDER BY. Support
des fonctions de groupages
(COUNT(), COUNT(DISTINCT
...), AVG(),
STD(), SUM(),
MAX() et MIN()).
Support des clauses LEFT OUTER JOIN
et RIGHT OUTER JOIN avec les
syntaxes ANSI SQL et ODBC.
Les alias de tables et colonnes sont compatibles avec le standard SQL92.
DELETE, INSERT,
REPLACE et
UPDATE retourne le nombre de lignes
affectées. Il est possible d'obtenir le nombre de
lignes trouvées en modifiant une option lors de la
connexion au serveur.
La commande spécifique à MySQL
SHOW est utilisée pour obtenir des
informations sur les bases, tables et index. La
commande EXPLAIN sert à optimiser
les requêtes.
Les noms de fonctions ne sont jamais en conflit avec
les noms de tables ou colonnes. Par exemple,
ABS est un nom de colonne valide.
La seule restriction est que, lors d'un appel de
fonction, aucun espace n'est toléré entre le nom de
la fonction et la parenthèse ouvrante
‘(’ suivante. See
Section 9.6, « Cas des mots réservés MySQL ».
Vous pouvez utiliser simultanément des tables de différentes bases (depuis la version 3.22).
Sécurité
Un système de droits et de mots de passe très souple et sécuritaire, qui vérifie aussi les hôtes se connectant. Les mots de passe sont bien protégés, car tout les échanges de mot de passe sont chiffrés, même lors des connexions.
Charges supportées et limites
Gère les très grandes bases de données. Nous
utilisons le serveur MySQL avec des
bases qui contiennent 50 millions de lignes et nous
connaissons des utilisateurs qui utilisent le
serveur MySQL avec plus de 60 000
tables et 5 000 000 000 (milliards) de lignes.
Jusqu'à 32 index sont permis par table. Chaque index
est constitué de 1 à 16 colonnes ou parties de
colonnes. La taille maximale d'un index est de 500
octets (ce qui peut être configuré à la compilation
du serveur MySQL. Un index peut
utiliser un préfixe issu d'un champs
CHAR ou VARCHAR.
Connexions
Les clients peuvent se connecter au serveur MySQL en utilisant les sockets TCP/IP, les sockets Unix ou les pipes nommés sous NT.
Support de ODBC
(Open-DataBase-Connectivity) pour
Windows 32 bits (avec les sources). Toutes les
fonctions ODBC 2.5 et de nombreuses autres. Par
exemple, vous pouvez utiliser MS Access pour vous
connecter au serveur MySQL. See
Section 25.1.1.1, « Qu'est-ce que ODBC? ».
L'interface Connector/JDBC fournit
le support pour les clients Java qui utilisent JDBC.
Ces clients peuvent être utilisés sur Windows et
Unix. Les sources de Connector/JDBC sont libres. See
Chapitre 25, Pilotes MySQL .
Traductions
Le serveur fournit des messages d'erreurs au client dans de nombreuses langues, y compris le fran¸ais. See Section 5.8.2, « Langue des messages d'erreurs ».
Support complet de plusieurs jeux de caractères,
comprenant ISO-8859-1 (Latin1),
german, big5,
ujis, etc. Par exemple, les
caractères nordiques
‘Â’,
‘ä’ et
‘ö’ sont autorisés
dans les noms de tables et colonnes.
Toutes les données sont sauvées dans le jeu de caractères choisi. Les comparaisons normales de chaînes sont insensibles à la casse.
Le tri est fait en fonction du jeu de caractères
choisi (par défaut, le jeu suédois). Il est possible
de le changer lorsque le serveur MySQL est démarré.
Pour voir un exemple très avancé de tri, voyez le
code de tri pour le Tchèque. Le serveur
MySQL supporte de nombreux jeux de
caractères qui peuvent être spécifié à la
compilation et durant l'exécution.
Clients et utilitaires
Inclut myisamchk, un utilitaire
rapide pour vérifier les tables, les optimiser et les
réparer. Toutes les fonctionnalités de
myisamchk sont aussi disponibles
via l'interface SQL. See
Chapitre 5, Administration du serveur.
Tous les programmes MySQL peuvent être appelés avec
l'option --help ou
-? pour obtenir de l'aide en ligne.
Cette section répond aux questions ``Jusqu'à quel point MySQL est-il stable ?'' et ``Puis-je faire confiance à MySQL pour mon projet ?'' Nous allons tenter d'apporter des réponses claires à ces questions importantes qui concernent tous les utilisateurs potentiels. Les informations de cette section sont fournies par les listes de diffusions, qui sont très actives et promptes à identifier les problèmes et les rapporter.
Le code original date du début des années 80 et fournit une
base de code stable, tout en assurant une compatibilité
ascendante avec le format ISAM. A TcX, le
prédécesseur de MySQL AB, le code de MySQL
a fonctionné sur des projets depuis la mi 1996, sans aucun
problème. Lorsque le Serveur MySQL a été
livré à un public plus large, nous avons réalisé qu'il
contenait du code ``jamais testé'' qui a été rapidement
identifié par les utilisateurs, qui effectuait des requêtes
différentes des nôtres. Chaque nouvelle version avait moins de
problèmes de portabilité, même si chaque nouvelle version
avait de nombreuses nouvelles fonctionnalités.
Chaque version du Serveur MySQL était
parfaitement fonctionnelle. Les seuls problèmes étaient
rencontrés par les utilisateurs de code de ces ``zone
d'ombres''. Naturellement, les nouveaux utilisateurs ne
connaissent pas ces zones : cette section tente de les
présenter, dans la mesure de nos connaissances. Les
descriptions correspondent surtout aux versions 3.23 du
Serveur MySQL. Tous les bogues connus et
rapportés ont été corrigés dans la dernière version, à
l'exception de ceux qui sont listés dans la section Bugs, qui
sont des problèmes de conception. See Section 1.5.7, « Erreurs connues, et limitations de MySQL ».
La conception du serveur MySQL est faite en
plusieurs couches, avec des modules indépendants. Certains des
modules les plus récents sont listés ici, avec leur niveau de
test :
Réplication -- Gamma
De grands serveurs en grappe utilisant la réplication sont en production, avec de bons résultats. L'amélioration de la réplication continue avec MySQL 4.x.
Tables InnoDB -- Stable (en 3.23 depuis
3.23.49)
Le gestionnaire transactionnel de tables
InnoDB a été déclaré stable en MySQL
version 3.23, à partir de la version 3.23.49.
InnoDB est utilisé dans de grands
systèmes complexes, avec forte charge.
Tables BDB -- Gamma
Le code de Berkeley DB est très stable,
mais nous sommes encore en train d'améliorer l'interface du
gestionnaire transactionnel de table BDB
du serveur MySQL. Cela demande encore du
temps pour qu'il soit aussi bien testé que les autres types
de tables.
FULLTEXT -- Beta
La recherche en texte plein fonctionne mais n'est pas encore largement adoptée. Des améliorations importantes sont prévues pour MySQL 4.0.
Connector/ODBC 3.51 (Stable)
Connector/ODBC 3.51 utilise le
SDK ODBC SDK 3.51 et est en production.
Certains problèmes qui ont surgi sont liée aux
applications, et indépendant du pilote ODBC ou le serveur
sous-jacent.
Tables à restauration automatique MyISAM
-- Gamma
Ce statut ne concerne que le nouveau code du gestionnaire de
tables MyISAM qui vérifie si la table a
été correctement fermée lors de l'ouverture, et qui
exécute automatiquement la vérification et réparation
éventuelles de la table.
MySQL AB fournit un support de première
qualité pour les clients payant, mais les listes de diffusions
de MySQL sont généralement rapides à donner des réponses aux
questions les plus communes. Les bogues sont généralement
corrigés aussitôt avec un patch. Pour les bogues sérieux, il
y a presque toujours une nouvelle version.
MySQL version 3.22 a une limite de 4Go par table. Avec le
nouveau format de table MyISAM, disponible
avec MySQL version 3.23, la taille maximale des tables a été
poussée à 8 millions de teraoctets (2 ^ 63 octets).
Notez, toutefois, que les systèmes d'exploitation ont leur propres limites. Voici quelques exemples :
| Système d'exploitation | Limite |
| Linux-Intel 32 bit | 2Go, 4Go ou plus, suivant la version de Linux |
| Linux-Alpha | 8To (?) |
| Solaris 2.5.1 | 2Go (4Go possibles avec un patch) |
| Solaris 2.6 | 4Go (peut être modifié avec une option) |
| Solaris 2.7 Intel | 4Go |
| Solaris 2.7 UltraSPARC | 512Go |
| NetWare avec/NSS | 8TB |
En Linux 2.2, vous pouvez avoir des tables plus grandes que 2Go en utilisant le patch LFS pour les systèmes de fichiers ext2. En Linux 2.4, le patche existe aussi pour ReiserFS. La plupart des distribution Linux courantes sont basées sur un noyau 2.4, et supporte déjà tous les patchs pour les grands fichiers (LFS). Cependant, la taille maximale de fichier dépend de nombreux facteurs, notamment le système de fichiers utilisé pour stocker les pages MySQL.
Pour une introduction détaillée à LFS sur Linux, voyez la page d' Andreas Jaeger Large File Support in Linux à http://www.suse.de/~aj/linux_lfs.html.
Par défaut, les tables MySQL peuvent atteindre une taille de
4Go. Vous pouvez vérifier la taille des tables avec la commande
SHOW TABLE STATUS ou la commande en ligne
myisamchk -dv nom_de_table. See
Section 13.5.3, « Syntaxe de SHOW ».
Si vous avez besoin de tables plus grandes que 4Go (et que votre
système d'exploitation le supporte, modifiez les paramètres
AVG_ROW_LENGTH et MAX_ROWS
lorsque vous créez votre table. See
Section 13.2.5, « Syntaxe de CREATE TABLE ». Vous pouvez aussi modifier ces
valeurs avec la commande ALTER TABLE. See
Section 13.2.2, « Syntaxe de ALTER TABLE ».
D'autres méthodes pour contourner les limitations des systèmes
de fichiers avec les tables MyISAM :
Si votre table est en lecture seule, utilisez
myisampack pour la compresser.
myisampack compresse une table à 50%, ce
qui double environs la taille des tables.
myisampack peut aussi combiner plusieurs
tables en une seule. See Section 8.2, « myisampack, le générateur de tables MySQL compressées en lecture seule ».
Une autre méthode pour contourner les limites du système
de fichiers pour les tables MyISAM est
d'utiliser les options RAID. See
Section 13.2.5, « Syntaxe de CREATE TABLE ».
MySQL inclut une bibliothèque MERGE qui
permet de gérer plusieurs tables identiques comme une
seule. See Section 14.2, « Tables assemblées MERGE ».
Le serveur MySQL lui même n'a aucun
problème de compatibilité avec l'an 2000
(Y2K) :
Le serveur MySQL utilise les fonctions de
date Unix, et n'a aucun problème avec les dates jusqu'en
2069; toutes les années écrites en deux
chiffres sont supposées faire partie de l'intervalle allant
de 1970 à 2069, ce
qui signifie que si vous stockez la date
01 dans une colonne de type
year, le serveur MySQL
la traitera comme 2001.
Toutes les fonctions de dates de MySQL sont stockées dans
un fichier sql/time.cc, et sont codées
très soigneusement pour être compatibles avec l'an 2000.
En MySQL version 3.22 et plus récent, le type de colonne
YEAR peut stocker les valeurs
0 et de 1901 à
2155 sur un seul octet, tout en affichant
2 ou 4 chiffres.
Vous pouvez rencontrer des problèmes avec les applications qui
utilisent le serveur MySQL sans être
compatible avec l'an 2000. Par exemple, les vieilles
applications utilisent des valeurs d'années sur deux chiffres
(ce qui est ambigu), plutôt qu'avec 4 chiffres. Ce problème
peut être complété par des applications qui utilisent des
valeurs telles que 00 ou
99 comme indicateur de données
``manquante''.
Malheureusement, ces problèmes peuvent se révéler difficiles à corriger car différentes applications peuvent être écrites par différents programmeurs, et chacun utilise un jeu différent de conventions et de fonctions de gestion des dates.
Voici une illustration simple qui montre que le serveur
MySQL n'a aucun problème avec les dates jusqu'en
2030 :
mysql>DROP TABLE IF EXISTS y2k;Query OK, 0 rows affected (0.01 sec) mysql>CREATE TABLE y2k (date DATE,->date_time DATETIME,->time_stamp TIMESTAMP);Query OK, 0 rows affected (0.00 sec) mysql>INSERT INTO y2k VALUES->("1998-12-31","1998-12-31 23:59:59",19981231235959),->("1999-01-01","1999-01-01 00:00:00",19990101000000),->("1999-09-09","1999-09-09 23:59:59",19990909235959),->("2000-01-01","2000-01-01 00:00:00",20000101000000),->("2000-02-28","2000-02-28 00:00:00",20000228000000),->("2000-02-29","2000-02-29 00:00:00",20000229000000),->("2000-03-01","2000-03-01 00:00:00",20000301000000),->("2000-12-31","2000-12-31 23:59:59",20001231235959),->("2001-01-01","2001-01-01 00:00:00",20010101000000),->("2004-12-31","2004-12-31 23:59:59",20041231235959),->("2005-01-01","2005-01-01 00:00:00",20050101000000),->("2030-01-01","2030-01-01 00:00:00",20300101000000),->("2050-01-01","2050-01-01 00:00:00",20500101000000);Query OK, 13 rows affected (0.01 sec) Records: 13 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM y2k;+------------+---------------------+----------------+ | date | date_time | time_stamp | +------------+---------------------+----------------+ | 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 | | 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 | | 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 | | 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 | | 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 | | 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 | | 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 | | 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 | | 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 | | 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 | | 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 | | 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 | | 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 | +------------+---------------------+----------------+ 13 rows in set (0.00 sec)
Cet exemple montre que les types DATE et
DATETIME ne poseront aucun problème avec les
dates futures (ils gèrent les dates jusqu'en 9999).
Le type TIMESTAMP, qui est utilisé pour
stocker la date courante, est valide jusqu'en
2030-01-01. TIMESTAMP va
de 1970 en 2030 sur les
machines 32 bits (valeur signée). Sur les machines 64 bits, il
gère les dates jusqu'en 2106 (valeur non
signée).
Même si le serveur MySQL est compatible an
2000, il est de votre responsabilité de fournir des données
non ambiguës. Voyez Section 11.3.4, « An 2000 et les types date » pour les
règles du serveur MySQL pour traiter les
dates ambiguës (les données contenant des années exprimées
sur deux chiffres).
Cette section donne un aper¸u du plan de développement de MySQL, incluant les futures fonctionnalités prévues pour MySQL 4.0, 4.1, 5.0 et 5.1. Les sections suivantes donnent plus de détails sur chaque version.
La série de production est MySQL 4.0, qui a été déclarée stable pour un environnement de production depuis la version 4.0.12, publiée en Mars 2003. Cela signifie que les développements futurs de la série des 4.0 est limitée aux corrections de bugs. Pour les anciennes version 3.23, seuls les bogues critiques seront corrigés.
L'effort de développement MySQL a lieu actuellement dans les versions MySQL 4.1 et 5.0. Cela signifie que les nouvelles fonctionnalités sont ajoutées aux versions 4.1 et 5.0. Les versions 4.1 et 5.0 sont disponibles en version alpha.
Avant de mettre à jour une version vers une autre, lisez les notes de la section Section 2.6, « Changer de version de MySQL ».
Les plans de certains fonctionnalités sont résumés dans cette table.
| Fonctionnalité | version MySQL |
| Unions | 4.0 |
| Sous-requêtes | 4.1 |
| R-trees | 4.1 (pour les tables MyISAM) |
| Procédures stockées | 5.0 |
| Vues | 5.0 ou 5.1 |
| Curseurs | 5.0 |
| Clés étrangères | 5.1 (déjà implémentées en 3.23 par InnoDB) |
| Triggers | 5.1 |
| Jointures externes | 5.1 |
| Contraintes | 5.1 |
Promise depuis longtemps par MySQL AB et
attendue avec impatience par nos utilisateur, le serveur MySQL
4.0 est disponible en version de production.
MySQL 4.0 est disponible au téléchargement depuis http://www.mysql.com/ et nos miroirs. MySQL 4.0 a été testé par un grand nombre d'utilisateurs et il est en production sur de très grands sites.
Les fonctionnalités principales de MySQL serveur 4.0 sont destinées à nos utilisateurs professionnels et communautaire : elles améliorent le capacités de MySQL pour gérer les missions critiques et les systèmes fortement chargés. D'autres fonctionnalités sont destinées aux utilisateurs de solutions intégrées.
Amélioration des performances
MySQL 4.0 dispose d'un cache de requêtes qui peut vous accélérer grandement vos applications qui utilisent souvent les mêmes requêtes. See Section 5.11, « Cache de requêtes MySQL ».
La version 4.0 accélère la vitesse du serveur
MySQL dans de nombreux domaines, notamment les
INSERT de masse, la recherche sur
les index compressés, la création d'index
FULLTEXT ainsi que les comptes
COUNT(DISTINCT).
Serveur MySQL embarqué
La nouvelle bibliothèque Embedded
Server (au lieu de client/serveur) peut
être facilement utilisée pour créer des
applications indépendantes ou intégrées. See
Section 1.3.1.2, « MySQL Server intégré (embedded) ».
Le moteur InnoDB en standard
Le moteur de tables InnoDB est
désormais livré en standard avec le serveur MySQL,
apportant le support complet des transactions ACID,
les clés étrangères avec modifications et
effacement en cascade, ainsi que le verrouillage de
ligne. See Chapitre 15, Le moteur de tables InnoDB.
Nouvelles fonctionnalités
Les nouvelles possibilités de recherche en
FULLTEXT de MySQL Serveur 4.0
permettent l'utilisation d'index
FULLTEXT sur de grandes
quantités de texte, avec des logiques binaires ou
en langage naturel. Les utilisateurs peuvent
paramétrer la taille minimum des mots, et définir
leur propre liste de mots interdits, dans n'importe
quel langue. Cela ouvre la possibilité de
nombreuses applications avec MySQL Serveur. See
Section 12.6, « Recherche en texte intégral (Full-text) dans MySQL ».
Respect des standards, portabilité et migration
Simplification de la migration depuis d'autres bases
de données vers MySQL Serveur, et notamment
TRUNCATE TABLE (comme sous
Oracle) et IDENTITY comme
synonyme pour les clés automatiquement
incrémentées (comme sous Sybase).
De nombreux utilisateurs seront heureux de savoir
que le serveur MySQL supporte aussi les requêtes
UNION, une fonctionnalité SQL
attendue avec impatience.
MySQL peut s'exécuter nativement sur les plates-formes NetWare 6.0. See Section 2.2.14, « Installer MySQL sur NetWare ».
Internationalisation
Nos utilisateurs allemands, autrichiens et suisses
remarqueront que nous avons un nouveau jeu de
caractères, latin1_de, qui
corrige les problèmes de tri des valeurs
allemandes, en pla¸ant les umlauts
allemands dans le même ordre que dans l'annuaire
d'Allemagne.
Amélioration de l'ergonomie
Durant la mise en place de fonctionnalités pour de nouveaux utilisateurs, nous n'avons pas oublié notre communauté de loyaux utilisateurs.
Une fonctionnalité pratique pour les
administrateurs de base de données est que la
plupart des paramètres de démarrage de
mysqld peuvent être modifiées
sans redémarrer le serveur. See
Section 13.5.2.8, « Syntaxe de SET ».
Les commandes DELETE et
UPDATE peuvent désormais
fonctionner sur plusieurs tables.
En ajoutant le support des liens
symboliques à MyISAM
au niveau des tables (et non plus au niveau des
bases, comme auparavant), et en autorisant les liens
symboliques sur Windows, nous espérons que nous
avons pris au sérieux vos demandes d'amélioration.
Des fonctions comme
SQL_CALC_FOUND_ROWS et
FOUND_ROWS() rendent possible le
comptages de lignes sans utiliser la clause
LIMIT.
La section sur les nouveautés du manuel rassemble toutes les nouveautés. See Section C.3, « Changements de la version 4.0.x (Production) ».
libmysqld rend le serveur MySQL disponible
pour toute une gamme d'applications très vaste. En utilisant
la bibliothèque du serveur MySQL intégré, vous pouvez
utiliser MySQL dans différentes applications et
appareillages, où l'utilisateur final n'aura même pas idée
de sa présence. Le serveur MySQL intégré est idéal pour
équiper les bornes internet, les kiosques publics, les
paquets matériel/ logiciels clé en main, les serveurs MySQL
haute performances, et les bases de données autonomes sur
CDrom.
De nombreux utilisateurs de libmysqld
profiteront de la double licence. Pour
ceux qui ne souhaitent pas être liés par la licence GPL, la
bibliothèque est aussi disponible avec une licence
commerciale. La bibliothèque MySQL intégrée utilise la
même interface que la bibliothèque cliente classique, ce qui
la rend pratique à utiliser. See Section 24.2.16, « libmysqld, la bibliothèque du serveur embarqué MySQL ».
MySQL 4.0 a posé les fondations pour de nouvelles fonctionnalités telles que les sous-requêtes imbriquées et l'Unicode qui sont d'ores et déjà implémentées en version 4.1, ainsi que les procédures stockées SQL-99, qui seront disponibles pour la version 5.0. Ils représentent les fonctionnalités les plus demandées par de nombreux clients.
Avec ces améliorations, les critiques du serveur de base de données MySQL devront être plus imaginatifs que jamais pour identifier des manques dans le serveur MySQL. Déjà connu depuis longtemps pour sa stabilité, sa rapidité et sa facilité d'emploi, le serveur MySQL va désormais satisfaire la liste de tous les voeux des clients les plus exigeants.
Les fonctionnalités ci-dessous sont implémentées en MySQL 4.1. Quelques autres fonctionnalités sont prévues pour MySQL 4.1, mais très peu. Voyez See Section B.8.1, « Nouvelles fonctionnalités prévues pour la version 5.0 ».
Les plus récentes fonctionnalités en cours de réalisation, comme par exemple les procédures stockées, seront disponibles en MySQL 5.0. See Section B.8.1, « Nouvelles fonctionnalités prévues pour la version 5.0 ».
Support des sous-requêtes et tables dérivées
Une sous-requête est une commande
SELECT imbriquée dans une autre
requête. Une table dérivée (une vue anonyme) est
une sous-requête dans une clause
FROM d'une autre commande. See
Section 13.1.8, « Sous-sélections (SubSELECT) ».
Accélération
Protocole binaire plus rapide, avec préparation des commandes et paramétrage. See Section 24.2.4, « Fonctions C de commandes préparées ».
Indexation BTREE pour les tables
HEAP, ce qui améliore
significativement le temps de réponse pour les
recherches non exactes.
Nouvelle fonctionnalité
CREATE TABLE table_name2 LIKE
table_name1 vous permet de créer, avec
une seule commande, une nouvelle table, avec une
structure identique à celle d'une autre table
existante.
Support pour les types géométriques OpenGIS (données géométriques). See Chapitre 18, Données spatiales avec MySQL.
La réplication peut être faite sur connexions SSL.
Compatibilité avec les standards, portabilité et migration
Le nouveau protocole client-serveur apporte la possibilité de faire passer plusieurs alertes au client, plutôt qu'une seule. Cela améliore grandement la gestion des erreurs lors des manipulations de masse.
SHOW WARNINGS affiche les erreurs
de la dernière commande. See
Section 13.5.3.19, « SHOW WARNINGS | ERRORS ».
Internationalisation
Pour supporter notre base d'utilisateurs en pleine croissance, et leur configurations locales, MySQL exploite désormais l'Unicode (UTF8).
Les jeux de caractères peuvent désormais être définis par colonnes, tables et bases. Cela permet d'améliorer la souplesse dans la conception des applications, en particuliers pour les sites multi-langues.
Pour la documentation sur l'amélioration du support des jeux de caractères, voyez Chapitre 10, Jeux de caractères et Unicode.
Améliorations d'ergonomie
En réponse à la demande populaire, nous avons
ajouté une commande HELP command
coté serveur, qui peut être utilisée en ligne de
commande du client mysql et
d'autres clients, pour obtenir de l'aide sur les
commandes SQL. Avec ces informations sur le serveur,
elles seront parfaitement adaptées à la version et
configuration du serveur.
Avec le nouveau protocole client/serveur, les requêtes multiples sont désormais activées. Cela vous permet d'émettre plusieurs requêtes en une seule commande, puis de lire tous les résultats en une seule fois. See Section 24.2.9, « Gestion des commandes multiples avec l'interface C ».
Le nouveau protocole client/serveur supporte aussi les jeux de résultats multiples. Cela peut arriver après une commande multiple, par exemple. Voir le point précédent.
Nous avons implémenté une syntaxe pratique
INSERT ... ON DUPLICATE KEY UPDATE
.... Elle vous permet de modifier une
ligne avec UPDATE, si l'insertion
INSERT avait généré un double
dans la colonne PRIMARY ou
UNIQUE. See
Section 13.1.4, « Syntaxe de INSERT ».
Nous avons ajouté une fonction d'agrégation,
GROUP_CONCAT(), qui permet de
concaténer des colonnes dans une seule chaîne de
résultat. See
Section 12.9, « Fonctions et options à utiliser dans les clauses GROUP BY ».
La section sur les nouveautés du manuel rassemble toutes les nouveautés. See Section C.2, « Changements de la version 4.1.x (Alpha) ».
Les nouveaux développements de MySQL sont désormais concentrés sur la version 5.0. Les procédures stockées et d'autres fonctionnalités seront en vedette. See Section B.8.1, « Nouvelles fonctionnalités prévues pour la version 5.0 ».
Pour ceux qui veulent jeter un oeil aux tout derniers développements de MySQL, nous avons rendu notre serveur BitKeeper disponible au public pour MySQL version 5.0. See Section 2.4.3, « Installer à partir de l'arbre source de développement ». Depuis décembre 2003, des paquets binaires de MySQL version 5.0 sont aussi disponibles.
Cette section vous présente les listes de diffusions MySQL, et donne des conseils quand à leur utilisation. En vous inscrivant à une des listes de diffusion, vous recevrez les messages que les autres auront envoyé, et vous pourrez envoyer vos propres questions et réponses.
Pour vous inscrire ou vous désinscrire à la liste de diffusion principale de MySQL, visitez le site http://lists.mysql.com/. N'envoyez pas de messages pour vous inscrire ou vous désinscrire sur la liste, car ces messages seront transmis automatiquement à des milliers d'utilisateurs.
Votre site local peut avoir beaucoup d'inscrits à une liste
de diffusion. Si c'est le cas, vous pouvez avoir une liste de
diffusion locale, de fa¸on à ce que les messages envoyés
par lists.mysql.com à votre site local
soit propagés par votre serveur local. Dans ce cas, contactez
votre administrateur local pour être ajouté ou retiré de la
liste.
Si vous voulez que le trafic de cette liste soit envoyé à
une autre boîte aux lettres de votre client mail, installez
un filtre basé sur les entêtes du message. Vous pouvez
utiliser notamment les entêtes List-ID: et
Delivered-To: pour identifier les messages
de la liste.
Les listes de diffusion MySQL suivantes existent :
announce
Ceci est la liste de diffusion d'annonces des versions de MySQL et des programmes compagnons. C'est une liste à faible volume, et tout utilisateur doit y être inscrit.
mysql
La liste de diffusion principale pour les discussions générales sur MySQL. Notez que certains sujets sont à diriger sur les listes spécialisées. Si vous postez sur la mauvaise liste, vous pourriez ne pas avoir avoir de réponse.
mysql-digest
La liste mysql en format journalier.
Cela signifie que vous recevrez tous les messages de la
journée en un seul gros email.
bugs
Sur cette liste, vous ne devriez envoyez que des bogues
complets, reproductibles ainsi que le rapport qui va avec,
en utilisant le script mysqlbug (si
vous utilisez Windows, il faut aussi inclure la
description du système d'exploitation et la version de
MySQL). See Section 1.4.1.3, « Comment rapporter un bogue ou un problème ».
bugs-digest
La liste bugs en format journalier.
internals
Une liste pour ceux qui travaillent sur le code MySQL. Sur cette liste, vous pouvez discuter du développement de MySQL et envoyer des correctifs.
internals-digest
La liste internals en format
journalier.
mysqldoc
La liste des personnes qui travaillent sur la documentation MySQL : des employés de MySQL AB, des traducteurs et d'autres membres de la communauté.
mysqldoc-digest
La liste mysqldoc en format journalier.
benchmarks
Cette liste est pour tous ceux qui sont intéressé par les performances. Les discussions se concentrent sur les performances (mais pas seulement avec MySQL), mais abordent aussi des problèmes de noyau, le système de fichiers, les disques, etc.
benchmarks-digest
La liste benchmarks en format
journalier.
packagers
Cette liste se concentre sur les paquets et les distributions MySQL. C'est l'un des forums utilisé par les responsables pour échanger des idées sur les paquets MySQL, pour s'assurer que MySQL est le même sur toutes les plates-formes.
packagers-digest
La liste packagers en format
journalier.
java
Une liste pour ceux qui utilisent MySQL et java. Elle concerne majoritairement les pilotes JDBC.
java-digest
La liste java en format journalier.
win32
Une liste pour ceux qui utilisent MySQL sur les systèmes d'exploitation de Microsoft, tels que Windows 9x/Me/NT/2000/XP.
win32-digest
La liste win32 en format journalier.
myodbc
Une liste pour tout ce qui concerne la connexion à MySQL avec le pilote ODBC.
myodbc-digest
La liste myodbc en format journalier.
mysqlcc
Une liste pour tout ce qui concerne le client graphique
MySQL Control Center.
mysqlcc-digest
La liste mysqlcc en format journalier.
plusplus
Une liste pour tout ce qui concerne la programmation avec les API C++ de MySQL.
plusplus-digest
La liste plusplus en format journalier.
msql-mysql-modules
Une liste pour tout ce qui concerne Perl et le support du module msql / mysql.
msql-mysql-modules-digest
La liste msql-mysql-modules en format
journalier.
Vous pouvez vous inscrire ou vous désinscrire de toutes les
listes en même temps de la même fa¸on que nous l'avons
décrit au début. Dans votre message d'inscription, utilisez
simplement le nom de liste approprié. Par exemple, pour vous
inscrire à la liste myodbc.
Si vous ne pouvez pas obtenir d'informations sur la liste de diffusion, une de vos options est de prendre un contrat de support auprès de MySQL AB, qui vous donnera un contact direct avec les développeurs MySQL.
Le tableau suivant présente diverses autres listes de diffusions consacrée à MySQL, dans d'autres langues que l'anglais. Notez que ces ressources ne sont pas gérées par MySQL AB, ce qui fait que nous ne pouvons pas garantir leur qualité.
<mysql-france-subscribe@yahoogroups.com>
Une liste de diffusion fran¸aise
Une liste de diffusion coréenne Envoyez un message
àsubscribe mysql your@e-mail.address.
<mysql-de-request@lists.4t2.com>
Une liste de diffusion allemande Envoyez un message à
subscribe mysql-de your@e-mail.address.
Vous aurez plus d'informations sur cette liste à
http://www.4t2.com/mysql/.
<mysql-br-request@listas.linkway.com.br>
Une liste de diffusion portugaise Envoyez un message à
subscribe mysql-br your@e-mail.address.
Une liste de diffusion espagnole Envoyez un message à
subscribe mysql your@e-mail.address.
Avant de soumettre un rapport de bogue ou une question, commencez par ces étapes simples :
Etudiez le manuel MySQL et faites y une recherche à : http://www.mysql.com/doc/ Nous nous effor¸ons de mettre à jour le manuel fréquemment, en y ajoutant les solutions aux nouveaux problèmes. L'historique de modification (http://www.mysql.com/doc/en/News.html) est particulièrement pratique car il est possible qu'une nouvelle version de MySQL propose déjà la solution à votre problème.
Cherchez dans la base de données des bogues sur http://bugs.mysql.com/ pour voir si le bogue a déjà été rapporté ou résolu.
Recherchez dans les archives des listes de diffusion de MySQL : http://lists.mysql.com/
Vous pouvez aussi utiliser l'URL http://www.mysql.com/search/ pour rechercher dans toutes les pages web (y compris le manuel) sur le site web de MySQL.
Si vous n'arrivez pas à trouver une réponse à votre question dans le manuel ou dans les archives, vérifiez auprès de votre expert MySQL local. Si vous ne trouvez toujours pas la réponse, vous pouvez lire la section suivante.
Notre base de données de bogues est publique, et peut être lue par tous sur le site http://bugs.mysql.com/. Si vous vous identifiez sur le système vous serez aussi capable d'envoyer des rapports.
Ecrire un bon rapport de bogue requiert de la patience, et le faire dès le début épargnera votre temps et le notre. Un bon rapport de bogue qui contient un cas de test complet améliorera vos chances de voir le bogue corrigé à la prochaine version. Cette section vous aidera à écrire correctement un rapport de bogue, de manière à ce que vous ne gaspillez pas votre temps à faire des textes qui ne nous aideront que peu ou pas.
Nous vous recommandons d'utiliser le script
mysqlbug pour générer un rapport de bogue
(ou rapporter un problème), dans la mesure du possible.
mysqlbug est situé dans le dossier
scripts de la distribution, ou, pour les
distributions binaire, dans le dossier
bin du dossier d'installation de MySQL.
Si vous êtes dans l'incapacité d'utiliser
mysqlbug, vous devez tout de même inclure
toutes les informations nécessaires listées dans cette
section.
Le script mysqlbug vous aide à générer
un rapport en déterminant automatiquement les informations
suivantes, mais si quelque chose d'important lui échappe,
ajoutez le dans votre message! Lisez cette section avec
attention, et assurez vous que toutes les informations
décrites ici sont présentes dans votre message.
De préférence, vous devriez tester le problème avec la
dernière version de production ou de développement de MySQL.
Il doit être facile de reproduire le test avec simplement la
commande ‘mysql test <
script’, appliquée au cas de test, ou en
exécutant le script Shell ou Perl inclus dans le rapport.
Tous les bogues postés sur le site de rapports de bogues http://bugs.mysql.com/ seront corrigés ou documentés dans la prochaine version de MySQL. Si seuls, de petits changements sont nécessaires, nous publierons aussi un patch.
Si vous avez découvert un problème de sécurité critiques
avec MySQL, il faut envoyer un email à
<security@mysql.com>.
Si vous avez un rapport de bogue reproductible, envoyez un
rapport sur le site
http://bugs.mysql.com/.
Notez que même dans ce cas, il est bon d'utiliser le script
mysqlbug pour rassembler des informations
sur votre système. Tous les bogues que nous pourrons
reproduire auront de bonnes chances d'être corrigés lors de
la prochaine version de MySQL.
Pour signaler d'autres problèmes, utilisez une des listes de diffusion MySQL.
Sachez qu'il est toujours possible de répondre à un message qui contient trop d'informations, alors qu'il est impossible de répondre à un message qui contient trop peu d'informations. Souvent, il est facile d'omettre des faits parce que vous pensez connaître la cause du problème et supposez que ces détails ne sont pas importants. Un bon principe à suivre est : si vous avez un doute à propos de quelque chose, faites nous en part. Il est bien plus rapide et bien moins frustrant d'écrire quelques lignes de plus dans un rapport plutôt que d'être obligé de demander une nouvelle fois et d'attendre une réponse parce que vous avez oublié une partie des informations la première fois.
L'erreur la plus commune est de ne pas indiquer le numéro de la version de MySQL qui est utilisé, ou de ne pas indiquer le système d'exploitation que vous utilisez (y compris le numéro de version de ce système d'exploitation). Ce sont des informations de première importance, et dans 99% des cas, le rapport de bogue est inutilisable sans ces informations. Souvent, nous recevons des questions telles que ``Pourquoi est ce que cela ne fonctionne pas pour moi ?''. Puis nous nous apercevons que la fonctionnalités en question n'est même pas programmée dans la version de MySQL utilisée, ou que le bogue décrit est déjà corrigé dans une nouvelle version de MySQL. Parfois aussi, les erreurs sont dépendantes des plates-formes. Dans ce cas, il est presque impossible de les corriger sans savoir quel système d'exploitation et quelle version exacte est utilisée.
Pensez aussi à fournir des informations concernant votre compilateur, si c'est pertinent. Souvent, les développeurs trouvent des bogues dans les compilateurs, et pensent que c'est liés à MySQL. La plupart des compilateurs sont en constant développement, et s'améliorent de version en version. Pour déterminer si votre problème dépend de votre compilateur, nous avons besoin de savoir quel compilateur est utilisé. Notez que les problèmes de compilations sont des bogues, et doivent être traités avec un rapport de bogues.
Il est particulièrement utile de fournir une bonne description du bogue dans le rapport de bogue. Cela peut être un exemple de ce que vous avez fait qui a conduit au problème, ou une description précise. Les meilleurs rapports sont ceux qui incluent un exemple complet permettant de reproduire le bogue. See Section D.1.6, « Faire une batterie de tests lorsque vous faites face à un problème de table corrompue ».
Si un programme produit un message d'erreur, il est très important d'inclure ce message dans votre rapport. Il est préférable que le message soit le message exact, car il est alors possible de le retrouver en utilisant les archives : même la casse doit être respectée. N'essayez jamais de vous rappeler d'un message d'erreur, mais faites plutôt un copier/coller du message complet dans votre rapport.
Si vous avez un problème avec MyODBC,
essayez de générer un fichier de trace
MyODBC. See
Section 25.1.1.9, « Rapporter des problèmes avec MYODBC ».
Pensez aussi que de nombreux personnes qui liront votre
rapport utilisent un formatage de 80 colonnes. Lorsque vous
générez votre rapport et vos exemples avec l'outil de ligne
de commande, utilisez une largeur de 80 colonnes. Utilisez
l'option --vertical (ou la fin de commande
\G) pour les affichages qui excèdent une
telle largeur (par exemple, avec la commande EXPLAIN
SELECT; voyez l'exemple un peu plus tard dans cette
section.
Voici un pense-bête des informations à fournir dans votre rapport :
Le numéro de version de la distribution de MySQL que vous
utilisez (par exemple MySQL Version 3.22.22). Vous pouvez
connaître cette version en exécutant la commande
mysqladmin version.
mysqladmin est situé dans le dossier
bin de votre distribution MySQL.
Le fabricant et le modèle de votre serveur.
Le système d'exploitation et la version que vous
utilisez. Pour la plupart des systèmes d'exploitation,
vous pouvez obtenir cette information en utilisant la
commande Unix uname -a.
Parfois, la quantité de mémoire (physique et virtuelle) est important. Si vous hésitez, ajoutez la.
Si vous utilisez une version de MySQL sous forme de source, le nom et le numéro de version du compilateur sont nécessaires. Si vous utilisez une version exécutable, le nom de la distribution est important.
Si le problème intervient lors de la compilation, incluez le message d'erreur exact et les quelques lignes de contexte autour du code en question dans le fichier où il est situé.
Si mysqld s'est arrêté, il est
recommandé d'inclure la requête qui a mené à cet
arrêt de mysqld. Vous pouvez
généralement la trouver en exécutant
mysqld en ayant activé les logs. See
Section D.1.5, « Utilisation des fichiers de log pour trouver d'où viennent les erreurs de mysqld ».
Si une table ou une base sont liés au problème ajoutez
le résultat de la commande mysqldump --no-data
db_name tbl_name1 tbl_name2 .... C'est très
simple à faire, et c'est un moyen efficace d'obtenir un
descriptif de table, qui nous permettra de recréer une
situation comparable à la votre.
Pour les problèmes liés à la vitesse, ou des problèmes
liés à la commande SELECT, pensez à
inclure le résultat de la commande EXPLAIN
SELECT ..., et au moins le nombre de ligne que
la commande SELECT doit produire. Vous
devriez aussi inclure le résultat de la commande
SHOW CREATE TABLE table_name pour
chaque table impliquée. Plus vous nous fournirez
d'informations, plus nous aurons de chance de vous aider
efficacement. Par exemple, voici un excellent rapport de
bogue (posté avec le script mysqlbug,
et effectivement rédigé en anglais) :
Exemple réalisé avec mysql en ligne
de commande (notez l'utilisation de la fin de commande
\G, pour les résultats qui pourraient
dépasser les 80 colonnes de large) :
mysql>SHOW VARIABLES;mysql>SHOW COLUMNS FROM ...\G<output from SHOW COLUMNS> mysql>EXPLAIN SELECT ...\G<output from EXPLAIN> mysql>FLUSH STATUS;mysql>SELECT ...;<A short version of the output from SELECT, including the time taken to run the query> mysql>SHOW STATUS;<output from SHOW STATUS>
Si un bogue ou un problème survient lors de l'exécution
de mysqld, essayez de fournir un script
qui reproduit l'anomalie. Ce script doit inclure tous les
fichiers sources nécessaires. Plus votre script
reproduira fidèlement votre situation, mieux ce sera. Si
vous pouvez réaliser un cas de test postez-le sur le site
http://bugs.mysql.com/
pour un traitement prioritaire!
Si vous ne pouvez pas fournir de script, fournissez tout
au moins le résultat de la commande mysqladmin
variables extended-status processlist dans votre
mail pour fournir des informations sur les performances de
votre système.
Si vous ne pouvez pas reproduire votre situation en
quelques lignes, ou si une table de test est trop grosse
à être envoyée par mail (plus de 10 lignes), exportez
vos tables sous forme de fichier avec la commande
mysqldump et créez un fichier
README qui décrit votre problème.
Créez une archive compressée de votre fichier en
utilisant tar et
gzip ou zip, et
placez le via ftp sur le site de
ftp://support.mysql.com/pub/mysql/secret/.
Puis, entrez la description de l'anomalie sur le site
http://bugs.mysql.com/.
Si vous pensez que le serveur MySQL fournit des résultats étranges pour une requête, incluez non seulement le résultat, mais aussi votre propre explication sur ce que le résultat devrait être, et un diagnostic de la situation.
Lorsque vous donnez un exemple du problème, il est mieux
d'utiliser des noms de variables et de tables qui existent
dans votre situation, plutôt que d'inventer de nouveaux
noms. Le problème peut être lié au noms des variables
ou tables que vous utilisez! Ces cas sont rares, mais il
vaut mieux éviter les ambiguïtés. Après tout, il est
plus facile pour vous de fournir un exemple qui utilise
votre situation réelle, et c'est bien mieux pour nous
aussi. Si vous avez des données que vous ne souhaitez pas
divulguer, vous pouvez utiliser le site
ftp pour les transférer dans le
dossier secret
ftp://support.mysql.com/pub/mysql/secret/.
Si les données sont vraiment ultra secrètes et que vous
ne souhaitez même pas nous les montrer, alors utilisez
d'autres noms et données pour votre rapport, mais
considérez cela comme un dernier recours.
Incluez toutes les options utilisées, si possible. Par
exemple, indiquez les options que vous utilisez lors du
démarrage de mysqld, et celle que vous
utilisez avec les programmes comme
mysqld et mysql, et
le script configure, qui sont souvent
primordiaux et pertinents. Ce n'est jamais une mauvaise
idée que de les inclure. Si vous utilisez des modules,
comme Perl ou PHP, incluez aussi les versions de ces
logiciels.
Si votre question porte sur le système de droits, incluez
le résultat de l'utilitaire
mysqlaccess, celui de
mysqladmin reload et tous les messages
d'erreurs que vous obtenez lors de la connexion. Lorsque
vous testez votre système de droits, il faut commencer
par utiliser la commande mysqladmin reload
version et de vous connecter avec le programme
qui vous pose problème. mysqlaccess
est situé dans le dossier bin de
votre installation de MySQL.
Si vous avez un patch pour un bogue, c'est une excellente chose. Mais ne supposez pas que nous n'avons besoin que du patch, ou même que nous allons l'utiliser, si vous ne fournissez pas les informations nécessaires pour le tester. Nous pourrions trouver des problèmes générés par votre patch, ou bien nous pourrions ne pas le comprendre du tout. Si tel est le cas, nous ne l'utiliserons pas.
Si nous ne pouvons pas vérifier exactement ce pourquoi est fait le patch, nous ne l'utiliserons pas. Les cas de tests seront utiles ici. Montrez nous que votre patch va générer toutes les situations qui pourraient arriver. Si nous trouvons un cas limite dans lequel votre patche ne fonctionne pas, même si il est rare, il risque d'être inutile.
Les diagnostics sur la nature du bogue, la raison de son déclenchement ou les effets de bords sont généralement faux. Même l'équipe MySQL ne peut diagnostiquer sans commencer par utiliser un débogueur pour déterminer la cause véritable.
Indiquez dans votre mail que vous avez vérifié le manuel de référence et les archives de courrier, de fa¸on à avoir épuiser les solutions que d'autres avant vous auraient pu trouver.
Si vous obtenez un message parse error,
vérifiez votre syntaxe avec attention. Si vous ne pouvez
rien y trouvez à redire, il est très probable que votre
version de MySQL ne supporte pas encore cette
fonctionnalité que vous essayez d'utiliser. Si vous
utilisez la version courante de mySQL et que le manuel
http://www.mysql.com/doc/
ne couvre pas la syntaxe que vous utilisez, c'est que
MySQL ne supporte pas votre syntaxe. Dans ce cas, vos
seules options sont d'implémenter vous même la syntaxe
ou d'envoyez un message à
<licensing@mysql.com> pour proposer de
l'implémenter.
Si le manuel présente la syntaxe que vous utilisez, mais que vous avez une ancienne version du serveur MySQL, il est recommandé de vérifier l'historique d'évolution de MySQL pour savoir quand la syntaxe a été supportée. Dans ce cas, vous avez l'option de mettre à jour votre MySQL avec une version plus récente. See Annexe C, Historique des changements MySQL.
Si vous avez un problème tel que vos données semblent
corrompues, ou que vous recevez constamment des erreurs
lors d'accès à une table, vous devriez commencer par
essayer de réparer votre table avec l'utilitaire de ligne
de commande myisamchk ou les syntaxes
SQL CHECK TABLE et REPAIR
TABLE. See
Chapitre 5, Administration du serveur.
Si vous avez des tables qui se corrompent facilement, il
vous faut essayer de trouver quand et pourquoi cela
arrive. Dans ce cas, le fichier
mysql-data-directory/'hostname'.err
peut contenir des informations pertinentes qu'il est bon
d'inclure dans votre rapport de bogues. See
Section 5.9.1, « Le log d'erreurs ». Normalement,
mysqld ne doit
jamais corrompre une table si il a été
interrompu au milieu d'une mise à jour. Si vous pouvez
trouvez la cause de l'arrêt de mysqld,
il est bien plus facile pour nous de fournir un correctif.
See Section A.1, « Comment déterminer ce qui pose problème ».
Si possible, téléchargez et installez la version la plus récente du serveur MySQL, et vérifiez si cela résout votre problème. Toutes les versions de MySQL sont testées à fond, et doivent fonctionner sans problème. Nous croyons à la compatibilité ascendante, et vous devriez pouvoir passer d'une version à l'autre facilement. See Section 2.1.2, « Choisir votre version de MySQL ».
Si vous disposez de l'accès au support client, contactez
aussi le support client à
<mysql-support@mysql.com>, en plus de la liste de
rapport de bogues, pour un traitement prioritaire.
Pour des informations sur les rapports de bogues avec
MyODBC, voyez
Section 25.1.1.9, « Rapporter des problèmes avec MYODBC ».
Pour des solutions aux problèmes les plus courants, voyez Annexe A, Problèmes et erreurs communes.
Lorsque des solutions vous sont envoyées individuellement et non pas à la liste, il est considéré comme bien vu de rassembler ces réponses et d'en envoyer un résumé sur le liste, de manière à ce que les autres en profitent aussi.
Si vous pensez que votre réponse peut avoir un intérêt général, vous pouvez envisager de l'envoyer sur la liste de diffusion, plutôt que de faire une réponse personnelle aux demandeurs. Essayez de rendre votre réponse aussi générale que possible, pour que suffisamment d'autres personnes puissent en profiter. Lorsque vous envoyez une réponse sur la liste, assurez vous qu'elle ne représente pas un doublon d'une réponse précédente.
Essayez de résumer l'essentiel de la question dans votre réponse. Ne vous croyez pas obligé de citer tout le message original.
Attention : n'envoyez pas de message avec le mode HTML activé ! De nombreux utilisateurs ne lisent pas leurs emails avec un navigateur.