1.6 Как сообщать об ошибках или проблемах
Прежде чем сообщать об ошибке, пожалуйста, попробуйте убедиться, что это действительно ошибка, и что она уже не была сообщена:
Начните с поиска в онлайн-справочнике MySQL по адресу https://dev.mysql.com/doc/. Мы стараемся поддерживать справочник актуальным, регулярно обновляя его решениями новых проблем. Кроме того, полезными могут оказаться заметки к выпуску, сопровождающие справочник, так как в более новой версии возможно уже есть решение вашей проблемы. Заметки к выпуску доступны по указанному адресу справочника.
-
Если вы получаете ошибку разбора для SQL-запроса, пожалуйста, внимательно проверьте свой синтаксис. Если вы не можете найти ошибку, очень вероятно, что ваша текущая версия MySQL Server не поддерживает используемый вами синтаксис. Если вы используете текущую версию, а в справочнике нет информации об используемом синтаксисе, то MySQL Server не поддерживает ваш запрос.
Если в справочнике описан используемый вами синтаксис, но у вас более старая версия MySQL Server, вам следует проверить историю изменений MySQL, чтобы узнать, когда был реализован синтаксис. В этом случае у вас есть возможность обновить MySQL Server до более новой версии.
Для решения некоторых распространенных проблем см. Раздел B.3, «Проблемы и распространенные ошибки».
Поищите в базе данных ошибок по адресу http://bugs.mysql.com/, чтобы узнать, была ли ошибка уже сообщена и исправлена.
Вы также можете использовать http://www.mysql.com/search/, чтобы выполнить поиск по всем веб-страницам (включая справочник) на веб-сайте MySQL.
Если вы не найдете ответа в справочнике, базе данных ошибок или архивах рассылок, обратитесь к местному эксперту по MySQL. Если вы по-прежнему не можете найти ответ на свой вопрос, пожалуйста, следуйте приведенным ниже рекомендациям для сообщения об ошибке.
Обычно для сообщения об ошибках используется база данных ошибок по адресу http://bugs.mysql.com/. Эта база данных является публичной и доступна для просмотра и поиска всем. Если вы войдете в систему, вы сможете создать новые отчеты.
Ошибки, сообщенные в базе данных ошибок по адресу http://bugs.mysql.com/ и исправленные для данного выпуска, отмечаются в заметках к выпуску.
Если вы обнаружили ошибку безопасности в MySQL Server, пожалуйста, сообщите нам об этом незамедлительно, отправив электронное письмо на адрес <secalert_us@oracle.com>. Исключение: клиенты по поддержке должны сообщать обо всех проблемах, включая ошибки безопасности, в службу поддержки Oracle по адресу http://support.oracle.com/.
Чтобы обсудить проблемы с другими пользователями, вы можете использовать MySQL Community Slack.
Написание хорошего отчета об ошибке требует терпения, но правильное его составление сэкономит время и вам, и нам. Хороший отчет об ошибке, содержащий полный тестовый случай для ошибки, значительно увеличивает вероятность ее исправления в следующем выпуске. Этот раздел поможет вам правильно составить свой отчет, чтобы не тратить время на действия, которые могут не помочь нам или помогут незначительно. Пожалуйста, внимательно прочтите этот раздел и убедитесь, что в вашем отчете указана вся необходимая информация.
В идеале, перед отправкой сообщения проверьте проблему с использованием последней производственной или тестовой версии MySQL Server. Любой человек должен быть в состоянии воспроизвести ошибку, просто используя mysql test <
script_file в вашем тестовом случае или выполнив командную оболочку или скрипт Perl, который вы включили в отчет об ошибке. Любая ошибка, которую мы можем воспроизвести, имеет высокую вероятность исправления в следующем выпуске MySQL.
В отчете об ошибке очень важно включить подробное описание проблемы. То есть, дайте пример всех действий, которые привели к возникновению проблемы, и опишите саму проблему в точных деталях. Лучшие отчеты содержат полный пример, демонстрирующий, как воспроизвести ошибку или проблему. См. Раздел 7.9, «Отладка MySQL».
Помните, что мы можем ответить на отчет, содержащий слишком много информации, но не на тот, который содержит слишком мало. Люди часто пропускают факты, потому что они думают, что знают причину проблемы и предполагают, что некоторые детали не важны. Хороший принцип - если вы сомневаетесь в необходимости указать что-то, укажите это. Быстрее и проще написать несколько дополнительных строк в вашем отчете, чем ждать ответа, если нам нужно попросить вас предоставить информацию, отсутствующую в исходном отчете.
Самые распространенные ошибки в отчетах об ошибках: (а) не указан номер версии дистрибутива MySQL, который вы используете, и (б) неполное описание платформы, на которой установлен сервер MySQL (включая тип платформы и номер версии). Эта информация очень важна, и в 99 случаях из 100 отчет об ошибке бесполезен без нее. Очень часто мы получаем вопросы типа: «Почему это не работает для меня?». Тогда мы обнаруживаем, что запрашиваемая функция не была реализована в этой версии MySQL или что ошибка, описанная в отчете, была исправлена в более новых версиях MySQL. Ошибки часто зависят от платформы. В таких случаях для нас практически невозможно что-либо исправить без знания операционной системы и номера версии платформы.
Если вы скомпилировали MySQL из исходных кодов, также укажите информацию о своем компиляторе, если она связана с проблемой. Часто люди находят ошибки в компиляторах и считают, что проблема связана с MySQL. Большинство компиляторов постоянно развиваются и становятся лучше с каждой новой версией. Чтобы определить, зависит ли ваша проблема от вашего компилятора, нам нужно знать, какой компилятор вы использовали. Обратите внимание, что каждую проблему компиляции следует рассматривать как ошибку и сообщать об этом соответствующим образом.
Если программа выводит сообщение об ошибке, очень важно включить его в ваш отчет. Если мы попытаемся найти что-то в архивах, лучше, чтобы сообщение об ошибке точно совпадало с тем, которое выводит программа. (Даже регистр букв должен быть учтен). Лучше всего скопировать и вставить всё сообщение об ошибке в ваш отчет. Никогда не пытайтесь воспроизвести сообщение из памяти.
Если у вас возникла проблема с Connector/ODBC (MyODBC), попробуйте сгенерировать файл трассировки и прикрепить его к вашему отчёту. См. .
Если ваш отчет включает длинные строки вывода запросов из тестовых случаев, которые вы запускаете с помощью командной утилиты mysql, вы можете сделать вывод более удобочитаемым, используя опцию --vertical или терминатор оператора \G. Пример использования \G показан в EXPLAIN SELECT разделе далее в этом разделе.
Пожалуйста, включите следующую информацию в ваш отчет:
Номер версии используемого вами дистрибутива MySQL (например, MySQL 5.7.10). Вы можете узнать, какую версию вы используете, выполнив команду mysqladmin version. Программа mysqladmin находится в каталоге
binв вашей установленной директории MySQL.Производитель и модель машины, на которой у вас возникла проблема.
Название и версия операционной системы. Если вы работаете с Windows, обычно вы можете получить имя и номер версии, дважды щелкнув значок «Мой компьютер» и выбрав меню “Справка/О Windows”. Для большинства операционных систем семейства Unix вы можете получить эту информацию, выполнив команду
uname -a.Иногда количество оперативной памяти (физической и виртуальной) имеет значение. Если вы сомневаетесь, включите эти значения.
-
Содержание файла
docs/INFO_BINиз вашей установки MySQL. Этот файл содержит информацию о том, как был сконфигурирован и скомпилирован MySQL. Если вы используете исходный дистрибутив программного обеспечения MySQL, укажите имя и номер версии компилятора, который вы использовали. Если вы используете двоичный дистрибутив, укажите имя дистрибутива.
Если проблема возникла во время компиляции, укажите точные сообщения об ошибках, а также несколько строк контекста вокруг проблемного кода в файле, где произошла ошибка.
Если процесс mysqld завершился аварийно, также следует сообщить о запросе, который привёл к неожиданному завершению mysqld. Обычно эту информацию можно получить, запустив mysqld с включённой регистрацией запросов и затем просмотрев логи после завершения mysqld. См. Раздел 7.9, «Отладка MySQL».
Если проблема связана с таблицей базы данных, включите в отчёт результат выполнения команды
SHOW CREATE TABLE. Это очень простой способ получить определение любой таблицы в базе данных. Эта информация поможет нам воссоздать ситуацию, с которой вы столкнулись.db_name.tbl_name-
Режим SQL, активный в момент возникновения проблемы, может быть значимым, поэтому, пожалуйста, укажите значение системной переменной
sql_mode. Для объектов хранимых процедур, хранимых функций и триггеров соответствующее значениеsql_mode— это значение, активное во время их создания. Для хранимых процедур или функций командаSHOW CREATE PROCEDUREилиSHOW CREATE FUNCTIONпокажет соответствующий режим SQL, или вы можете запросить информацию черезINFORMATION_SCHEMA:SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE FROM INFORMATION_SCHEMA.ROUTINES;
Для триггеров вы можете использовать следующую команду:
SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, TRIGGER_NAME, SQL_MODE FROM INFORMATION_SCHEMA.TRIGGERS;
-
Для проблем производительности или проблем с оператором
SELECT, вы всегда должны включать выводEXPLAIN SELECT ...и, как минимум, число строк, которые возвращает операторSELECT. Вы также должны включить выводSHOW CREATE TABLEдля каждой вовлеченной таблицы. Чем больше информации вы предоставите о своей ситуации, тем выше вероятность того, что вам помогут.tbl_nameНиже приведён пример хорошего отчёта об ошибке. Команды выполняются с помощью инструмента командной строки mysql. Обратите внимание на использование разделителя
\Gдля команд, которые в противном случае давали бы очень длинные строки вывода, которые трудно читать.mysql>
SHOW VARIABLES;mysql>SHOW COLUMNS FROM ...\G<output from SHOW COLUMNS>mysql>EXPLAIN SELECT ...\G<output from EXPLAIN>mysql>FLUSH STATUS;mysql>SELECT ...;<A short version of the output from SELECT, including the time taken to run the query>mysql>SHOW STATUS;<output from SHOW STATUS> -
Если ошибка или проблема возникает при выполнении mysqld, попробуйте предоставить скрипт, который воспроизводит проблему. Этот скрипт должен включать все необходимые исходные файлы. Чем точнее скрипт воспроизводит вашу ситуацию, тем лучше. Если вы можете создать воспроизводимый тестовый случай, загрузите его, чтобы прикрепить к отчёту об ошибке.
Если вы не можете предоставить скрипт, в отчёт необходимо включить вывод команды mysqladmin variables extended-status processlist, чтобы предоставить некоторую информацию о производительности вашей системы.
Если вы не можете создать тестовый случай с небольшим количеством строк, или если таблица тестовых данных слишком большая для включения в отчёт об ошибке (более 10 строк), используйте mysqldump для создания файла
README, описывающего вашу проблему. Создайте сжатый архив ваших файлов с помощью tar и gzip или zip. После отправки отчёта об ошибке в нашу базу ошибок по адресу http://bugs.mysql.com/, перейдите на вкладку «Файлы» в отчёте об ошибке, чтобы получить инструкции по загрузке архива в базу ошибок.Если вы считаете, что MySQL сервер возвращает странный результат от команды, укажите не только результат, но и ваше мнение о том, каким должен быть результат, и объяснение, обосновывающее ваше мнение.
При предоставлении примера проблемы лучше использовать имена таблиц, переменных и т.д., которые существуют в вашей реальной ситуации, а не придумывать новые. Проблема может быть связана с именем таблицы или переменной. Такие случаи редки, но лучше перестраховаться. В конце концов, вам будет проще предоставить пример, использующий вашу реальную ситуацию, а нам это, безусловно, лучше. Если у вас есть данные, которые вы не хотите показывать другим в отчёте об ошибке, загрузите их с помощью вкладки «Файлы», как описано ранее. Если информация действительно конфиденциальна и вы не хотите её показывать даже нам, используйте другие имена в примере, но, пожалуйста, рассматривайте это как последний вариант.
По возможности, укажите все опции, используемые для соответствующих программ. Например, укажите опции, используемые при запуске сервера mysqld, а также опции, используемые при выполнении любых программ MySQL-клиентов. Опции программ, таких как mysqld и mysql, а также скрипта configure часто являются ключевыми для решения проблем и очень актуальны. Это никогда не помешает. Если ваша проблема связана с программой, написанной на языке, таком как Perl или PHP, укажите номер версии обработчика языка, а также версии любых модулей, которые использует программа. Например, если у вас есть скрипт Perl, использующий модули
DBIиDBD::mysql, укажите номера версий Perl,DBIиDBD::mysql.Если ваш вопрос связан с системой привилегий, включите вывод mysqladmin reload и все сообщения об ошибках, которые вы получаете при попытке подключения. При тестировании привилегий выполните mysqladmin reload version и попробуйте подключиться с помощью программы, которая вызывает у вас проблемы.
-
Если у вас есть исправление для ошибки, приложите его. Но не предполагайте, что исправление — всё, что нам нужно, или что мы можем его использовать, если вы не предоставите необходимую информацию, такую как тестовые примеры, демонстрирующие ошибку, которую исправляет ваше исправление. Мы можем найти проблемы в вашем исправлении или вообще не понять его. В таком случае мы не сможем его использовать.
Если мы не можем проверить точное назначение исправления, мы не будем его использовать. Тестовые примеры помогают нам в этом. Покажите, что исправление обрабатывает все возможные ситуации. Если мы найдём пограничный случай (даже редкий), где исправление не сработает, оно может оказаться бесполезным.
Догадки о природе ошибки, о причинах её возникновения или её зависимости обычно ошибочны. Даже команда MySQL не может угадать эти вещи, не воспользовавшись отладчиком, чтобы определить реальную причину ошибки.
Укажите в отчёте об ошибке, что вы проверили справочник и архив почты, чтобы другие знали, что вы пытались самостоятельно решить проблему.
-
Если ваши данные выглядят повреждёнными или при доступе к определённой таблице возникают ошибки, сначала проверьте свои таблицы с помощью
CHECK TABLE. Если эта команда сообщит об ошибках:Механизм восстановления от сбоев при перезапуске сервера после его завершения обрабатывает очистку, поэтому в типичном режиме работы нет необходимости “восстанавливать” таблицы. Если у вас возникла ошибка с
InnoDBтаблицами, перезапустите сервер и посмотрите, сохраняется ли проблема, или ошибка повлияла только на кэшированные данные в памяти. Если данные повреждены на диске, рассмотрите возможность перезапуска с включённым параметромinnodb_force_recovery, чтобы вы могли сохранить повреждённые таблицы.Для не транзакционных таблиц попробуйте восстановить их с помощью
REPAIR TABLEили с помощью myisamchk. См. Главу 7, Администрирование сервера MySQL.
Если вы работаете в Windows, пожалуйста, проверьте значение
lower_case_table_namesс помощью командыSHOW VARIABLES LIKE 'lower_case_table_names'. Эта переменная влияет на то, как сервер обрабатывает регистр букв в именах баз данных и таблиц. Её влияние для данного значения должно быть описано в Разделе 11.2.3, «Чувствительность к регистру идентификаторов». Если у вас часто возникают повреждённые таблицы, вы должны попытаться выяснить, когда и почему это происходит. В этом случае журнал ошибок в каталоге данных MySQL может содержать информацию о произошедшем. (Это файл с суффиксом
.errв имени.) См. Раздел 7.4.2, «Журнал ошибок». Пожалуйста, включите любую соответствующую информацию из этого файла в свой отчёт об ошибке. Обычно mysqld не должен повреждать таблицу, если ничего не прервало её обновление. Если вы сможете найти причину завершения работы mysqld, нам будет гораздо легче предоставить вам исправление проблемы. См. Раздел B.3.1, «Как определить причину проблемы».Если возможно, загрузите и установите последнюю версию сервера MySQL и проверьте, решит ли это вашу проблему. Все версии программного обеспечения MySQL тщательно тестируются и должны работать без проблем. Мы стремимся сделать всё максимально совместимым со старыми версиями, и вы должны иметь возможность без труда переключаться между версиями MySQL. См. Раздел 2.1.2, «Какую версию и дистрибутив MySQL установить».
© 2025 Oracle
Licensed under the GPLv2 License.