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.