E.1.1 Компиляция MySQL для отладки
Иногда в случае каких-либо очень специфических проблем помогает отладка
MySQL. Для этого необходимо сконфигурировать сборку MySQL с параметрами
--with-debug
или --with-debug=full
. Чтобы проверить, был ли код MySQL
скомпилирован с возможностью отладки, нужно запустить команду: mysqld
--help
. Если среди опций присутствует флаг --debug
, то отладка доступна.
Кроме того, если задана возможность отладки, команда mysqladmin ver
выводит версию mysqld
как mysql ... --debug
.
При использовании компиляторов gcc или egcs рекомендуется следующая
конфигурационная строка:
CC=gcc CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors \
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \
--with-debug --with-extra-charsets=complex
Такая запись позволит избежать проблем с библиотекой libstdc++
и
исключениями C++ (многие компиляторы имеют проблемы с исключениями C++ в
кодах потоков) и скомпилировать версию MySQL с поддержкой всех кодировок.
Если есть подозрение, что может возникнуть ошибка переполнения памяти, то
можно сконфигурировать MySQL с параметром --with-debug=full
, чтобы
установить программу контроля выделения памяти (SAFEMALLOC
). Однако
SAFEMALLOC
замедляет работу системы, поэтому при возникновении проблем с
производительностью необходимо запустить mysqld
с опцией
--skip-safemalloc
. Эта опция заблокирует проверки переполнения памяти для
каждого вызова malloc
и free
.
Если mysqld
перестает падать в аварийном режиме при компиляции ее с
параметром --with-debug
, то, возможно, вы нашли ошибку в компиляторе или
произошла ошибка синхронизации внутри MySQL. В этом случае можно
попытаться добавить к переменным CFLAGS
и CXXFLAGS
в приведенной выше
конфигурационной строке -g
и не использовать параметр --with-debug
. Если
mysqld
и после этого будет падать, то можно по меньшей мере подключить к
ней отладчик gdb
или использовать gdb
для core-файла, чтобы выяснить, что
происходит.
Если MySQL сконфигурирован для отладки, то автоматически становятся
доступными множество дополнительных функций контроля надежности, которые
отслеживают состояние mysqld
. Если они обнаруживают что-либо
"неожиданное", то информация об этом будет записана в поток вывода
stderr
, который safe_mysqld
направит в журнал ошибок! Таким образом, если
возникают какие-либо неожиданные проблемы с MySQL и при этом доступен
исходный код дистрибутива, то первое, что необходимо сделать, -
сконфигурировать MySQL для отладки! (А второе необходимое действие - это,
конечно, послать письмо на mysql@lists.mysql.com и попросить помощи).
Пожалуйста, для всех сообщений о сбоях или вопросов относительно
используемой версии MySQL используйте скрипт mysqlbug
!
В поставке MySQL для Windows файл mysqld.exe
по умолчанию скомпилирован с
поддержкой трассировочных файлов.