|  |  
 
Toutes les versions de MySQL sont testées sur de nombreuses plates-formes avant d'être livrées. Cela n'assure pas qu'il n'y ait aucune erreur dans MySQL, mais si elles existent, elles sont rares et très difficiles à trouver. Si vous avez un problème, il nous sera toujours utile que vous fassiez un bilan complet de votre système, et cela vous permettra aussi de résoudre plus sûrement votre problème.
 
En premier lieu, il faut savoir si le problème provient de votre démon mysqldou de votre client. Si vous exécutez la commandemysqladmin version, vous pourrez savoir le temps de service de votre serveurmysqld. Simysqlda terminé son service inopinément, vous en trouverez la raison dans le fichier ``mysql-data-directory/'hostname'.err''. 
Etant donné qu'il est très difficile de savoir pourquoi le serveur plante, commencez par vérifier si ce qui plante chez d'autres, plante aussi pour vous. Vous pouvez ainsi tester ce qui suit :
 
Arrêtez votre démon mysqldavecmysqladmin shutdown, puis lancezisamchk --silent --force */*.ISMsur toutes les tables. Enfin, relancez le démonmysqld. Ceci vous assurera que le serveur est en état de marche. Reportez vous à la sectionMaintenance.Utilisez mysqld --logpour accéder à l'historique : vous pourrez ainsi savoir si le serveur s'arrête après une requête particulière. Près de 95% des bugs interviennent après la même requête !Généralement, c'est une des dernières requête du fichier d'historique, juste avant les lignes de redémarrage de MySQL. Vous pouvez vérifier ceci avec la séquence suivante :
Arrêtez le serveur MySQL (avec mysqladmin shutdown)Make a backup of files in the MySQL database directory.
Vérifiez les toutes tables avec isamchk -s */*.ISM. Réparez les tables corrompues avecisamchk -r chemin-de-la-table.ISM.Effacez (ou déplacez) les anciens fichiers d'historiques du dossier de donnéesde MySQL.
Redémarrez le serveur avec safe_mysql --log.Si mysqlds'interromps, vous pourrez exécutermysql < mysql-log-filepour recherche une éventuelle requête rebelle. Vous pouvez aussi mettre le fichier d'historique dans un autre dossier que le dossier par défaut, en lancant MySQL avec les optionssafe_mysqld --data=path-to-backup-directory.Avez vous essayé les benchmarks ? Elles testent MySQL dans de nombreux domaines. Vous pouvez aussi ajoutez des lignes de codes qui vont simuler votre application! Les benchmarks sont situées dans le dossier ``bench'' de la distribution, ou, pour les distributions binaire, dans le dossier ``sql-bench'' du dossier d'installation MySQL.
Essayez fork_test.pletfork2_test.pl.Vérifiez le fichier ``mysql-data-directory/'hostname'.err'' : il contient peut être les erreurs.
Si vous configurez MySQL en mode debuggage, il vous sera plus facile de repérer des erreurs lorsqu'un problème se présentera. Reconfigurez MySQL avec l'option --with-debugpuis recompilez.   G.1  Debugguer un serveur MySQL.La configuration en mode debug de MySQL force le mode d'allocation sécurisé : cela met en lumière des erreurs, et fourni un affichage plus important sur le détails des opérations.
Avez vous appliqué les derniers patchs de votre OS ?
Utiliser l'option --skip-lockingdemysqld. Sur certains systèmes, le gestionnairelockdde verrous ne fonctionne par correctement. Cette option (--skip-locking) forcemysqldà ne pas l'utiliser. (Cela implique que vous ne pourrez pas lancer 2 serveursmysqldsur les mêmes données, et que vous devrez être très prudent lors de l'utilsiation deisamchk, mais ce peut être une option instructive.).Avez vous essayé la commande mysqladmin -u root processlistlorsquemysqldsemble fonctionner, mais ne pas répondre ? Parfois,mysqldest dans le comas, même si il ne semble pas l'être. Le problème peut provenir du fait que toutes les connexions sont prises, ou bien d'un problème interne.mysqladmin processlistest toujours utilisable, même en cas de surcharge de connexions, et peut fournir des informations très utiles, comme le nombre de connexions et leur statut.Lancez la commande mysqladmin -i 5 statusdans une nouvelle console, pour avoir des statistiques en temps réel.Essayez la combinaison suivante :
 
Lancez mysqldà partir degdb(ou d'un autre debuggeur).Exécutez vos scripts de tests.
Utilisez la commande back(ou backtrace dans votre debuggeur) lorsque le dump demysqldest généré. 
Essayez de simuler votre application avec un script Perl pour forcer MySQL à crasher ou faire des erreurs.
Ou enfin, envoyer un rapport d'erreur.   2.3  Comment rapporter des bugs et des problèmes. Mais, soyez encore plus détaillé que d'habitude. Etant donné que MySQL fonctionne parfaitement pour de nombreuses personnes, le crash peut provenir d'une caractéristique de votre ordinateur. (par exemple, une erreur due à un système de librairies spécifique).
Si vous avez un problème avec les tables à lignes de taille variable, et que vous n'utilisez pas de colonne de type BLOB ou TEXT(et seulement desVARCHAR) vous pouvez essayer de remplacer tous les typesVARCHARparCHARavecALTER TABLE. Cela va forcer MySQL à utiliser des lignes à taille fixe. Les lignes à taille fixe prennent un peu plus de place, mais sont beaucoup moins sujette à dégradation. Le gestionnaire de ligne de taille variable a été utilisé à TCX (NDT : qui a concu MySQL) depuis 3 ans au moins sans aucun problème, mais, par nature, les lignes à taille variables sont plus délicates. |