1.7 如何报告错误或问题

在发布有关问题的错误报告之前,请尝试确认它是错误并且尚未报告:

如果手册涵盖了您正在使用的语法,但是您使用的是 MySQL Server 的较旧版本,则应查看 MySQL 更改历史记录以了解何时实施了语法。在这种情况下,您可以选择升级到较新版本的 MySQL Server。

如果在手册,错误数据库或邮件列 tableFiles 中找不到答案,请与当地的 MySQLmaven 联系。如果仍然找不到问题的答案,请使用以下准则报告该错误。

报告错误的常规方法是访问http://bugs.mysql.com/,这是我们的错误数据库的地址。该数据库是公共的,任何人都可以浏览和搜索。如果登录到系统,则可以 Importing 新报告。

在发行说明中记录了在错误数据库http://bugs.mysql.com/中发布的,针对给定发行版已更正的错误。

如果您发现 MySQL 服务器中的安全错误,请通过向<secalert_us@oracle.com>发送电子邮件立即通知我们。exception:支持 Client 应通过http://support.oracle.com/向 Oracle 支持部门报告所有问题,包括安全错误。

要与其他用户讨论问题,可以使用MySQL 社区松弛

编写好的错误报告需要耐心,但是第一次正确地执行报告可以为我们和您自己节省时间。一个好的 bug 报告,其中包含该 bug 的完整测试用例,使得我们很可能在下一版本中修复该 bug。本部分可帮助您正确编写报告,以免浪费时间去做对我们没有多大帮助或根本没有帮助的事情。请仔细阅读本节,并确保报告中包含此处描述的所有信息。

最好在发布之前,使用 MySQL Server 的最新生产或开发版本测试问题。任何人都可以通过在测试用例上使用mysql test < script_file或运行错误报告中包含的 shell 或 Perl 脚本来重复该错误。我们能够重复的任何错误都很有可能在下一个 MySQL 版本中得到修复。

当错误报告中包含对问题的良好描述时,这将非常有帮助。也就是说,举一个很好的例子说明导致问题的所有操作,并详细描述问题本身。最好的报告是那些包含完整示例的示例,这些示例说明了如何重现该错误或问题。参见第 28.5 节“调试和移植 MySQL”

请记住,我们可能对包含太多信息的报告做出回应,而对包含太少信息的报告做出回应。人们经常忽略事实,因为他们认为他们知道问题的原因,并认为某些细节无关紧要。遵循的一个很好的原则是,如果您不确定要说些什么,请说明。如果我们必须要求您提供初始报告中缺少的信息,则在报告中多写几行比 await 更长的答案要更快,更麻烦。

错误报告中最常见的错误是(a)不包括您使用的 MySQL 发行版的版本号,以及(b)不完整描述安装 MySQL 服务器的平台(包括平台类型和版本号) 。这些是高度相关的信息,在没有这些情况的情况下,有 100 个案例中有 99 个案例是无效的。很多时候,我们会收到诸如“为什么这对我不起作用?”之类的问题。然后,我们发现请求的功能未在该 MySQL 版本中实现,或者报告中描述的错误已在较新的 MySQL 版本中修复。错误通常取决于平台。在这种情况下,我们几乎不可能在不知道 os 和平台版本号的情况下进行任何修复。

如果您是从源代码编译的 MySQL,请记住,如果与问题有关,还应提供有关编译器的信息。人们通常会在编译器中发现错误,并认为问题与 MySQL 有关。大多数编译器一直在开发中,并且每个版本都变得更好。为了确定您的问题是否取决于您的编译器,我们需要知道您使用的编译器。请注意,每个编译问题都应视为错误,并进行相应报告。

如果程序产生错误消息,将错误消息包含在报告中非常重要。如果我们尝试从 Files 中搜索内容,则最好报告的错误消息与程序产生的错误消息完全匹配。 (甚至应注意字母大小写.)最好将整个错误消息复制并粘贴到您的报告中。您永远不要尝试从内存中重现消息。

如果连接器/ ODBC(MyODBC)有问题,请尝试生成跟踪文件并将其与报告一起发送。参见如何报告连接器/ ODBC 问题或错误

如果您的报告中包含使用mysql命令行工具运行的测试用例中的较长查询输出行,则可以使用--vertical选项或\G语句终止符使输出更具可读性。本节后面的EXPLAIN SELECT示例演示了\G的用法。

请在报告中包括以下信息:

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;

以下是一个非常好的错误报告的示例。该语句使用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>

如果无法提供脚本,则至少应在报告中包含mysqladmin 变量扩展状态进程列 table的输出,以提供有关系统性能的一些信息。

如果我们无法验证补丁的确切目的,我们将不会使用它。测试用例在这里对我们有帮助。证明该补丁程序可以处理所有可能发生的情况。如果我们发现补丁无法正常工作的极端情况(即使是极少数的情况),则可能毫无用处。

如果您使用的是 Windows,请使用SHOW VARIABLES LIKE 'lower_case_table_names'语句验证lower_case_table_names的值。此变量影响服务器处理数据库名称和 table 名称的字母大小写的方式。给定值的效果应如第 9.2.3 节“标识符区分大小写”中所述。

首页