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.