Компиляция 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 по умолчанию скомпилирован с поддержкой трассировочных файлов.
Создание трассировочных файлов
Если сервер mysqld не запускается или если вы можете вызвать его скорую аварийную остановку, то для выяснения причин неполадок можно попытаться создать трассировочный файл.
Для этого необходимо иметь mysqld , скомпилированный для отладки. Проверить, скомпилирован ли mysqld для отладки можно, выполнив mysqld -V . Если номер данной версии заканчивается на -debug , то она скомпилирована с поддержкой трассировочных файлов.
Запустите сервер mysqld с журналом трассировки в каталоге '/tmp/mysqld.trace' (или 'C:\mysqld.trace' под Windows):
mysqld --debug
Под Windows необходимо также использовать флаг --standalone , чтобы mysqld не стартовал как сервис:
В окне DOS введите следующее:
mysqld --debug --standalone
После этого можно использовать клиента командной строки mysql.exe во втором окне DOS, чтобы воспроизвести проблему. Для остановки описанного выше сервера mysqld следует воспользоваться командой mysqladmin shutdown .
Следует учесть, что трассировочный файл получится очень большим! Чтобы получить трассировочный файл меньшего размера, можно использовать что-нибудь вроде:
mysqld --debug=d,info,error,query,general,where:O,/tmp/mysqld.trace
при этом в каталог '/tmp/mysqld.trace' будет выводиться только информация с наиболее интересными для вас признаками.
Если вы создаете отчет о подобных ошибках, то, пожалуйста, присылайте в соответствующий список рассылки только те строки из трассировочного файла, которые, по вашему мнению, имеют непосредственное отношение к ошибке! Те же, кто затрудняются определить место ошибки, могут загрузить на ftp трассировочный файл вместе с отчетом об ошибках по адресу ftp://support.mysql.com/pub/mysql/secret/, чтобы разработчики MySQL могли взглянуть на него.
Трассировочный файл создается с помощью пакета DBUG , автором которого является Фред Фиш (Fred Fish). См. раздел Пакет DBUG.
1 2 3 4
8 8 8
| |