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".

Retornar