Sur la plupart des systèmes, vous pouvez démarrer
mysqld à partir de gdb
pour obtenir plus d'informations si mysqld
plante.
Avec quelques anciennes versions de gdb sous
Linux vous devez exécuter run --one-thread
si vous voulez être capables de déboguer les threads de
mysqld threads. Dans ce cas, vous ne pouvez
n'avoir qu'un thread actif à la fois. Nous vous recommandons de
mettre à jour gdb à la version 5.1 dès que
possible vu que le débogage des threads fonctionne mieux avec
cette version !
Lors de l'utilisation de mysqld sous
gdb, vous devez désactiver le tra¸age de la
pile avec --skip-stack-trace pour pouvoir
trouver les erreurs de segmentations avec
gdb.
Il est très difficile de déboguer MySQL sous
gdb si vous effectuez plusieurs nouvelles
connexions tout le temps vu que gdb ne
libère pas la mémoire occupée par les anciens threads. Vous
pouvez contourner ce problème en démarrant
mysqld avec -O thread_cache_size=
'max_connections +1'. Dans la plupart des cas, le
simple fait d'utiliser -O
thread_cache_size=5' vous aidera beaucoup !
Si vous voulez obtenir un core dump sur Linux si
mysqld se termine avec un signal
SIGSEGV, vous pouvez démarrer
mysqld avec l'option
--core-file. Ce fichier noyau peut être
utilisé pour effectuer des tra¸ages qui peuvent vous aider à
trouver pourquoi mysqld s'est terminée :
shell> gdb mysqld core
gdb> backtrace full
gdb> exit
See Section A.4.2, « Que faire si MySQL plante constamment ? ».
Si vous utilisez gdb 4.17.x ou plus récent
sous Linux, vous devez installer un fichier
.gdb, avec les informations suivantes, dans
votre répertoire courant :
set print sevenbit off handle SIGUSR1 nostop noprint handle SIGUSR2 nostop noprint handle SIGWAITING nostop noprint handle SIGLWP nostop noprint handle SIGPIPE nostop handle SIGALRM nostop handle SIGHUP nostop handle SIGTERM nostop noprint
Si vous rencontrez des problèmes lors du débogage des threads
avec gdb, vous devez obtenir la version 5.x
de gdb et essayer cela à la place. La
nouvelle version de gdb a une meilleur
gestion des threads !
Voilà un exemple de comment déboguer
mysqld :
shell> gdb /usr/local/libexec/mysqld
gdb> run
...
backtrace full # A faire lorsque mysqld crashe
Incluez la sortie suivante dans un mail généré avec
mysqlbug et envoyez le sur les listes de
diffusion. See Section 1.4.1.1, « Les listes de diffusion de MySQL ».
Si mysqld ne répond plus, vous pouvez
utiliser des outils système tel que strace
ou /usr/proc/bin/pstack pour savoir où
mysqld s'est bloqué.
strace /tmp/log libexec/mysqld
Si vous utilisez l'interface DBI de Perl,
vous pouvez activer le débogage en utilisant la méthode
trace ou en définissant la variable
d'environnement DBI_TRACE.
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.
