Иногда в случае каких-либо очень
специфических проблем помогает
отладка 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 по умолчанию
скомпилирован с поддержкой
трассировочных файлов.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
