Depurando o mysqld no gdb
Na maioria dos sistemas você também pode iniciar o mysqld
a partir do gdb
para obter mais informações se o mysqld
falhar.
Com uma versão antiga do gdb
no Linux você deve usar run --one-thread
se você quiser estar apto a depurar a thread mysqld
. Neste caso você só pode ter uma thread ativa por vez. Nós recomendamos que você atualize para gdb 5.1 ASAP já que a depuração da thread funciona muito melhor com esta versão!
Ao executar o mysqld
com gdb, você deve disabilitar a pilha de rastreamento com --skip-stack-trace
para estar apto a conseguir segmentation fault com gdb.
É muito difícil depurar o MariaDB no gdb
se você fizer muitas conexões o tempo todo já que gdb
não libera a memória para threads antigas. Você pode evitar este problema iniciando mysqld
com -O thread_cache_size= 'max_connections +1'
. Na maioria dos casos só o uso de -O thread_cache_size=5'
já ajuda muito!
Se você quiser um tiver um core dump no Linux quando o mysqld
morre com um sinal SIGSEGV, você pode iniciar o mysqld
com a opção --core-file
. Este arquivo core pode ser usado para fazer um rastreamento que pode lhe ajudar a descobrir porque o mysqld
morreu:
shell> gdb mysqld core
gdb> backtrace full gdb> exit
See Seção A.4.1, "O Que Fazer Se o MariaDB Continua Falhando".
Se você estiver usando gdb 4.17.x ou acima no Linux, você deve instalar um arquivo .gdb
, com a seguinte informação, em seu diretório atual:
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
Se você tiver problemas depurando threads com gdb, você deve fazer o download do gdb 5.x e experimentá-lo. A nova versão do gdb tem um tratamento de threads bem melhorado.
Aqui está um exemplo de como depurar o mysqld:
shell> gdb /usr/local/libexec/mysqld
gdb> run
...
backtrace full # Faça isto quando o mysqld falhar
Inclua a saída acima e uma email gerado com mysqlbug
e envie-o para lista de email do MariaDB. Leia "As Listas de Discussão do MariaDB".
Se o mysqld
travar você pode usar algumas ferramentas de sistema como strace
ou /usr/proc/bin/pstack
para exeminar onde mysqld
travou.
strace /tmp/log libexec/mysqld
Se você estiver usando a interface Perl DBI
, você pode habilitar a informação de depuação usando o método trace
ou definindo a variável de ambiente DBI_TRACE
. See "A interface DBI
".