Spec-Zone .ru
спецификации, руководства, описания, API
|
На большинстве систем можно также запустить mysqld с gdb, чтобы получить больше информации, если mysqld отказывает.
С некоторыми более старыми gdb версиями на Linux следует
использовать run --one-thread
если Вы хотите быть в состоянии отладить потоки mysqld.
В этом случае у Вас может только быть один поток, активный за один раз. Лучше обновлять до gdb 5.1, потому что отладка потока работает намного лучше с этой
версией!
Потоки NPTL (библиотека нового потока по Linux) могут вызвать проблемы, работая mysqld под gdb. Некоторые признаки:
В этом случае следует установить следующую переменную окружения в оболочке прежде, чем запустить gdb:
LD_ASSUME_KERNEL=2.4.1export LD_ASSUME_KERNEL
Работая mysqld под gdb,
следует отключить трассировку стека с --skip-stack-trace
быть в состоянии поймать segfaults в пределах gdb.
В MySQL 4.0.14 и выше Вас должен использовать --gdb
опция к mysqld. Это устанавливает обработчика прерываний для SIGINT
(должен был остановить mysqld с ^C
установить контрольные
точки) и отключить трассировку стека и базовую обработку файла.
Очень трудно отладить MySQL под gdb, если Вы делаете много новых
соединений, все время как gdb не освобождает память для старых
потоков. Можно избежать этой проблемы, запускаясь mysqld с thread_cache_size
набор к значению, равному max_connections
+ 1. В большинстве случаев только использование --thread_cache_size=5'
помогает много!
Если Вы хотите получить дамп ядра на Linux, если mysqld умирает с сигналом SIGSEGV, можно запустить mysqld с --core-file
опция. Этот базовый файл может использоваться, чтобы сделать след,
который может помочь Вам узнать, почему mysqld умер:
shell> gdb mysqld core
gdb> backtrace fullgdb> quit
См. Раздел C.5.4.2, "Что к MySQL Do If Продолжает Отказывать".
Если Вы используете gdb 4.17.x или выше на Linux, следует
установить a .gdb
файл, со следующей информацией, в Вашем текущем каталоге:
set print sevenbit offhandle SIGUSR1 nostop noprinthandle SIGUSR2 nostop noprinthandle SIGWAITING nostop noprinthandle SIGLWP nostop noprinthandle SIGPIPE nostophandle SIGALRM nostophandle SIGHUP nostophandle SIGTERM nostop noprint
Если у Вас есть проблемные отладочные потоки с gdb, следует загрузить gdb 5.x и попробовать это вместо этого. Новая gdb версия очень улучшила обработку потока!
Вот пример, как отладить mysqld:
shell> gdb /usr/local/libexec/mysqld
gdb> run...backtrace full # Do this when mysqld crashes
Включайте предыдущий вывод в отчет об ошибках, который можно зарегистрировать использование инструкций в Разделе 1.7, "Как Сообщить об Ошибках или проблемах".
Если mysqld
зависает, можно попытаться использовать некоторые системные инструменты как strace
или /usr/proc/bin/pstack
исследовать, где mysqld завис.
strace /tmp/log libexec/mysqld
Если Вы используете Perl DBI
интерфейс, можно включить отладочную информацию при
использовании trace
метод или устанавливая DBI_TRACE
переменная окружения.