Spec-Zone.ru › MySQL 5.7

1.5 Как сообщать об ошибках или проблемах

Прежде чем сообщать об ошибке, пожалуйста, проверьте, что это действительно ошибка и что она еще не была сообщена:

  • Начните с поиска в онлайн-справочнике 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 на вашем тестовом случае, или запустив shell-скрипт или Perl-скрипт, который вы включаете в отчете об ошибке. Любая ошибка, которую мы можем воспроизвести, имеет высокую вероятность исправления в следующем выпуске MySQL.

Очень полезно включать в отчет об ошибке подробное описание проблемы. То есть, предоставьте хороший пример всего, что вы делали, что привело к проблеме, и опишите саму проблему с точностью. Лучшие отчеты содержат полный пример, показывающий, как воспроизвести ошибку или проблему. См. Раздел 5.8, «Отладка MySQL».

Помните, что мы можем ответить на отчет, содержащий слишком много информации, но не на отчет, содержащий слишком мало. Люди часто пропускают факты, потому что думают, что знают причину проблемы и предполагают, что некоторые детали не важны. Хорошим правилом является: если вы сомневаетесь в том, чтобы что-то указать, укажите это. Быстрее и проще написать несколько дополнительных строк в отчете, чем ждать ответа дольше, если нам потребуется попросить вас предоставить информацию, отсутствующую в первоначальном отчете.

Наиболее распространённые ошибки в отчётах об ошибках: (а) не включение номера версии используемого дистрибутива MySQL и (б) неполное описание платформы, на которой установлен сервер MySQL (включая тип платформы и номер версии). Это очень важная информация, и в 99 из 100 случаев отчёт об ошибке бесполезен без неё. Очень часто мы получаем вопросы типа «Почему это не работает для меня?». Затем мы обнаруживаем, что запрашиваемая функция не была реализована в этой версии MySQL или что ошибка, описанная в отчете, была исправлена в более новых версиях MySQL. Ошибки часто зависят от платформы. В таких случаях для нас практически невозможно что-либо исправить без знания операционной системы и номера версии платформы.

Если вы скомпилировали MySQL из исходного кода, также укажите информацию о компиляторе, если она связана с проблемой. Люди часто обнаруживают ошибки в компиляторах и считают, что проблема связана с MySQL. Большинство компиляторов постоянно развиваются и совершенствуются с каждой версией. Чтобы определить, зависит ли ваша проблема от компилятора, нам нужно знать, какой компилятор вы использовали. Обратите внимание, что все проблемы, связанные с компиляцией, следует рассматривать как ошибки и сообщать об этом соответствующим образом.

Если программа выдаёт сообщение об ошибке, очень важно включить это сообщение в ваш отчёт. Если мы попытаемся найти что-то из архивов, лучше, чтобы сообщение об ошибке точно совпадало с тем, что выдаёт программа. (Даже регистр букв должен соблюдаться.) Лучше всего скопировать и вставить всё сообщение об ошибке в ваш отчёт. Никогда не пытайтесь воспроизвести сообщение из памяти.

Если у вас возникла проблема с Connector/ODBC (MyODBC), пожалуйста, попробуйте сгенерировать файл трассировки и приложить его к вашему отчёту. См. .

Если в вашем отчете содержатся длинные строки вывода запросов из тестовых случаев, которые вы запускаете с помощью командной строки mysql, вы можете сделать вывод более удобочитаемым, используя опцию --vertical или терминатор оператора \G. Пример EXPLAIN SELECT в этом разделе демонстрирует использование \G.

Пожалуйста, включите следующую информацию в ваш отчёт:

END_OF_DOCUMENT_MARKER
  • Номер версии дистрибутива 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. См. Раздел 5.8, «Отладка 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. См. Главу 5, Администрирование сервера MySQL.

    Если вы работаете в Windows, проверьте значение lower_case_table_names с помощью команды SHOW VARIABLES LIKE 'lower_case_table_names'. Эта переменная влияет на то, как сервер обрабатывает регистр букв в именах баз данных и таблиц. Её эффект для данного значения должен быть описан в разделе 9.2.3, «Чувствительность к регистру идентификаторов».

  • Если у вас часто возникают повреждённые таблицы, вам следует попытаться выяснить, когда и почему это происходит. В этом случае журнал ошибок в каталоге данных MySQL может содержать некоторую информацию о произошедшем. (Это файл с .err в имени.) См. раздел 5.4.2, «Журнал ошибок». Пожалуйста, включите любую релевантную информацию из этого файла в ваш отчёт об ошибке. Обычно mysqld не должен повреждать таблицу, если ничего не остановило его посреди обновления. Если вы можете найти причину остановки mysqld, это значительно облегчит нам предоставление решения проблемы. См. раздел B.3.1, «Как определить, что вызывает проблему».

  • Если возможно, загрузите и установите последнюю версию сервера MySQL и проверьте, устранит ли она вашу проблему. Все версии программного обеспечения MySQL тщательно тестируются и должны работать без проблем. Мы стремимся к максимальной обратной совместимости, и вы должны без труда переключиться между версиями MySQL. См. раздел 2.1.2, «Какую версию и дистрибутив MySQL установить».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/bug-reports.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API