1.7.1. MySQL邮件列表

在本节中介绍了MySQL邮件列表,并给出了使用邮件列表的指南。订购邮件列表后,将以电子邮件消息的形式收到所有已记录的信息。你也可以将自己的问题和解答发送至邮件列表。

1.7.1.1. MySQL邮件列表

要想订购本节所介绍的邮件列表或取消订购,请访问http://lists.mysql.com/。对于大多数邮件列表,可选择能够获取单独消息的正规列表版本,或选择按天发布的包含大量消息的文摘版本。

不要将订购信息或取消订购的信息发送到邮件列表,原因在于,这类消息将自动分发给数千位其他用户。

在你的所在地,可能有很多MySQL邮件列表的订户。如果是这样,该地点可能会有本地邮件列表,这样,从lists.mysql.com发出的消息将被传播到本地列表。在这类情形下,请与你的系统管理员联系,添加或删除本地MySQL列表。

如果希望将邮件列表的信息传送到邮件程序的邮箱中,请根据消息标题设置过滤器。可以使用列表ID: 或投递至: 识别列表消息的标题。

MySQL列表包含:

·         通告

该列表用于通告新的MySQL版本和相关程序。这是1种低容量列表,所有的MySQL用户均应订购它。

·         mysql

这是关于一般MySQL讨论的主要列表。请注意,对于某些主题来说,在更专门的列表中会得到更好地讨论。如果将问题张贴到了错误的列表,可能不会得到回答。

·         缺陷

该列表面向那些希望随时了解自上次MySQL版本发布以来已通报事宜的人员,或希望积极参与缺陷寻找和更正进程的人员。请参见1.7.1.3节,“如何通报缺陷和问题”

·         内部构件

该列表面向那些与MySQL代码打交道的人员。它也是讨论MySQL开发并张贴补丁的论坛。

·         mysqldoc

该列表面向那些与MySQL文档打交道的人员: MySQL AB公司的人员,译者,以及其他社区成员。

·         基准

该列表面向任何对性能事宜感兴趣的人员。讨论主要集中在数据库性能方面(不限于MySQL),也包括更广的类别,如内核性能、文件系统、磁盘系统等。

·         packagers(包装程序)

该列表主要讨论包装和分发MySQL方面的问题。这是供分发版维护人员交流MySQL打包事宜的论坛,为的是确保在所有支持的平台和操作系统上,MySQL的外观和感觉尽可能类似。

·         java

该列表主要讨论MySQL服务器和Java方面的问题。它主要讨论JDBC驱动程序,包括MySQL Connector/J。

·         win32

该列表涵盖了在Microsoft操作系统环境下(如Windows 9x, Me, NT, 2000, XP和2003)与MySQL软件有关的所有主题,

·         myodbc

该列表涵盖了与使用ODBC连接到MySQL服务器有关的所有主题。

·         gui-tools

该列表涵盖了与MySQL GUI工具有关的所有主题,包括MySQL管理员以及MySQL控制中心图形客户端

·         cluster

该列表主要讨论MySQL簇。

·         dotnet

该列表主要讨论MySQL服务器和.NET平台方面的问题。它与MySQL Connector/Net提供人的关系最密切。

·         plusplus

该列表涵盖了使用C++ API进行MySQL编程的所有主题。

·         perl

该列表涵盖了与Perl对MySQL支持、以及DBD::mysql有关的所有主题。

如果无法从MySQL邮件列表或论坛获得问题解答,一种选择是购买MySQL AB的支持服务。这样,你就能与MySQL开发人员直接联系。

下面介绍了一些英语以外其他语言的MySQL邮件列表。这些邮件列表不是由MySQL AB运营的。

·         <mysql-france-subscribe@yahoogroups.com>

法语邮件列表。

·         <list@tinc.net>

朝鲜语邮件列表。发送电子邮件订购mysql your@email.address

·         <mysql-de-request@lists.4t2.com>

德语邮件列表。发送电子邮件订购mysql-de your@email.addresshttp://www.4t2.com/mysql/站点上,可找到关于该邮件列表的更多信息。

·         <mysql-br-request@listas.linkway.com.br>

葡萄牙语邮件列表。发送电子邮件订购mysql-br your@email.address

·         <mysql-alta@elistas.net>

西班牙语邮件列表。发送电子邮件订购mysql your@email.address

1.7.1.2. 请教问题或通报缺陷

张贴缺陷报告或问题之前,请:

·         首先搜索MySQL在线手册,http://dev.mysql.com/doc/。我们经常更新该手册,以使该手册保持最新,其中包含相应的解决方案和新发现的问题。变更史(http://dev.mysql.com/doc/mysql/en/News.html)可能更有用,原因在于,在较新的版本中可能包含对你所提出问题的解决方案。

·         搜索缺陷数据库,http://bugs.mysql.com/,查找该缺陷是否已通报或更正。

·         搜索MySQL邮件列表档案,http://lists.mysql.com/

·         你也可以使用http://www.mysql.com/search/来搜索MySQL AB网站上的所有网页(包含手册)。

如果无法在手册或档案中找到答案,请与本地MySQL专家协商。如果仍无法获得解答,在与我们联系之前,请按照介绍发送电子邮件至MySQL邮件列表,具体内容见下一节。

1.7.1.3. 如何通报缺陷和问题

通报缺陷的正常地址是http://bugs.mysql.com/,它也是我方缺陷数据库的地址。这是1个公共数据库,任何人都能浏览它并进行相应的搜索。如果登录到系统,可输入新的报告。

编写良好的缺陷报告需要耐心,但在第1时间正确地完成它不仅能节省我们的时间,也能节省你自己的时间。良好的缺陷报告应包含对缺陷的完整测试情况,以便我们能够在下个版本中更正该缺陷。本节介绍的内容用于帮助你正确地编写报告,从避免将你的时间浪费在对我们帮助不大或没有帮助的事上,

我们鼓励任何人使用mysqlbug脚本来生成缺陷报告(或通报问题)。Mysqlbug可在脚本目录下找到(源码分发版),也能在MySQL安装目录的bin子目录下找到(二进制分发版)。如果不能使用mysqlbug(例如,如果你正在Windows平台上运行),应包括本节所述的所有必要信息(更重要的是,应介绍操作系统和MySQL版本),这点十分重要。

通过自动确定下述信息,mysqlbug脚本能够帮助你生成报告,但是,如果遗漏了某些重要事项,请将其包含在消息中。请认真阅读本节,并确保在你的报告中包含了本节所述的所有信息。

在张贴问题前,最好使用MySQL服务器的最新生产版或开发版对问题进行测试。通过在所含的测试范例上使用“mysql test < script_file,或运行缺陷报告中所含的Shell或Perl脚本,任何人均应能重复该缺陷。

对于在缺陷数据库(http://bugs.mysql.com/)中张贴的所有缺陷,均会被纳入或记录在下一个MySQL版本中。如果只需要少量更改就能更正问题,我们或许会给出更正该问题的补丁。

如果发现MySQL中存在敏感的安全缺陷,请发送电子邮件至security@mysql.com

如果有1份可重复的缺陷报告,请将其提交到缺陷数据库,http://bugs.mysql.com/。注意,即使在该情况下,也应首先运行mysqlbug脚本以找出与你的系统有关的信息,这是一个不错的习惯。对于任何我们能再现的缺陷,在下一个MySQL版本中修正它的机会很大。

要想通报其他问题,请使用MySQL邮件列表。

请注意,我们可能会对包含过多信息的消息做出响应,但不太会对包含过少信息的消息做出回应。人们常会省略掉一些事实,因为他们认为自己知道了故障的原因,并想当然地认为这类细节无关紧要。良好的原则是: 如果你对陈述某事犹豫不定,请陈述之。如果我们要求你提供初始报告中缺少的信息,在报告中编写多行信息源比等候回复要快,麻烦也更小。

在缺陷报告中,最常犯的错误包括:(a)未包含所使用MySQL的版本号,以及(b)未完全描述安装了MySQL服务器的平台(包括平台类型,以及版本号)。这是高度相关的信息,如果没有它,99%的缺陷报告无用。我们遇到这类问题,“为何它对我没用”? 随后,我们发现在该MySQL版本中,所请求的特性尚未实施,或在较新的MySQL版本中已更正了报告中描述的缺陷。有些时候,错误与平台相关,在这类情况下,如果不知道操作系统和平台的版本号,我们几乎不可能更正任何问题。

如果你是从源码编译MySQL的,如果与问题有关,还应提供有关编译器的信息。问题经常出在编译器,但人们却认为问题与MySQL有关。大多数编译均处于不断的开发过程中,并会变得越来越好。为了确定问题是否与你的编译器有关,我们需要知道你所使用的编译器。注意,所有的编译问题均应被当作缺陷并予以通报。

在你的报告中包含良好的问题描述时,报告最有帮助。也就是说,应给出示例,指明导致问题的所有事项,并准确描述问题本身。最好的报告应包含完整的示例,这类示例应阐明再现缺陷或问题的方式。请参见E.1.6节,“如果出现表崩溃,请生成测试案例”

如果程序产生了错误消息,也应将其包含在你的报告中,这点很重要。如果我们打算使用程序搜索档案,最好是通报的错误消息与程序生成的错误消息准确匹配。(即使是字母的大小写也应考虑在内)。永远不要尝试从记忆中再现错误消息,而是应将整个消息拷贝并粘贴到报告中。

如果遇到与Connector/ODBC (MyODBC)有关的问题,请生成1份跟踪文件,并与报告一起发送给我们。请参见26.1.1.9节,“如何通报MyODBC问题或缺陷”

请记住,很多阅读你报告的人员会使用80列的显示器。使用mysql命令行工具生成报告或示例时,如果输出内容可能会超过这类显示器的可用宽度,应使用“--vertical”选项(或“\G”语句终结符),例如EXPLAIN SELECT语句,请参见本节后面给出的示例。

请在你的报告中包含下述信息:

·         你所使用的MySQL分发版的版本号(例如MySQL 4.0.12)。通过执行mysqladmin version,即可了解正在运行版本。Mysqladmin程序位于MySQL安装目录的bin子目录下。

·         出现问题的机器的制造商和型号。

·         操作系统的名称和版本。如果你使用的是Windows操作系统,通常能通过双击“我的电脑”图标并点击“帮助/关于Windows”菜单来了解操作系统的名称和版本。对于大多数Unix操作系统,可通过执行命令uname a获取这类信息。

·         某些时候,内存容量(实际内存和虚拟内存)也有关系。如果怀疑它,也应包含这类数值。

·         如果你正在使用的是MySQL软件的源码分发版,还须提供所使用编译器的名称和版本。如果使用的是二进制分发版,需要提供其名称。

·         如果在编译过程中出现问题,应给出准确的错误消息,出错文件中的不良代码,以及该代码附近的数行内容。

·         如果mysqld停止运行,还应通报导致mysqld崩溃的查询。通常,能够通过运行启用了查询日志功能的mysqld找出它,然后在mysqld崩溃后查找日志。请参见E.1.5节,“使用日志文件找出mysqld中的错误原因

·         如果数据库表与问题有关,还应包含mysqldump --no-data db_name tbl_name的输出。这是一种了解数据库中表相关信息的简单易行而且功能强大的方式。该信息能帮助我们建立与你所遇到的情况相匹配的场景。

·         对于与SELECT语句的速度有关的缺陷或问题,总应包含“EXPLAIN SELECT ...”的输出,以及SELECT语句生成的行数(至少)。对于每个涉及的表,应包含SHOW CREATE TABLE tbl_name的输出。你所提供的关于具体情况的信息越多,得到帮助的可能性就越大。

下面给出了一个良好缺陷报告的示例。应使用mysqlbug脚本张贴它。本例采用了mysql命令行工具。对于输出内容可能会超过80列显示器可用宽度的语句,应使用“\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时出现错误或问题,应提供导致异常的输入脚本。该脚本应包含任何所需的源文件。越能再现具体情况的脚本越好。如果能够创建可再现的测试范例,请将其张贴到http://bugs.mysql.com/,它将得到优先对待。

如果你不能提供脚本,至少应在你的邮件中包含mysqladmin variables extended-status processlist的输出,以提供关于系统执行情况的某些信息。

·         如果不能生成包含数行内容的测试范例,或者如果测试表过大以至于无法发送到邮件列表(超过10行),应使用mysqldump转储表,并创建描述问题的README文件。

使用targzipzip创建文件的压缩包档案,并使用FTP将档案传输到ftp://ftp.mysql.com/pub/mysql/upload/。然后将问题提交到我们的缺陷数据库中,http://bugs.mysql.com/

·         如果你认为MySQL服务器生成了奇怪的查询结果,不仅应包含结果,还应给出你对该结果的看法,以及支持观点的基础。

·         提供问题的示例时,最好使用实际情况下已有的变量名、表名等,而不是新名称。问题可能与变量名或表名有关。或许这类情况很罕见,但安全总比道歉强。归根结底,对你来说,提供关于实际情况的示例要简单些,当然对我们也更好。如果你的数据不打算展示给其他人,请使用FTP将其传输到ftp://ftp.mysql.com/pub/mysql/upload/。如果信息是高度保密的,而且你甚至不打算向我们展示,请使用其他名称给出示例,但请注意,这应是最后的选择。

·         如果可能,应包含相关程序的所有选项。例如,应指明启动mysqld服务器时使用的选项,以及用来运行MySQL客户端程序的选项。对于程序(如mysqldmysql)选项以及configure脚本的选项,通常是解答问题的关键,关系十分密切。包含它们总不是坏主意。如果使用了任何模块,如Perl或PHP等,还应给出它们的版本。

·         如果你的问题与权限系统有关,请给出mysqlaccess的输出,mysqladmin reload的输出,以及进行连接时获得的所有错误消息。测试权限时,首先应运行mysqlaccess。接下来,执行mysqladmin reload version,并与导致问题的程序相连。mysqlaccess可在MySQL安装目录的bin子目录下找到。

·         如果你有关于某一缺陷的补丁,也请将它包含在内。但不要认为该补丁是我们所需的全部,如果未提供补丁所更正缺陷的必要信息(如测试范例),不要假定我们会使用它。我们可能会通过补丁发现问题,或者不能理解该补丁,如果是这样,我们不会使用该补丁。

如果我们不能准确核实补丁的目的,将不会使用它。测试范例会对我们有所帮助。请指明该补丁能处理所有的问题。如果我们发现补丁不能工作的临界情况(即使很罕见),它可能是无用的。

·         关于缺陷是什么、出现原因、以及缺陷导因的猜测通常是错的。即使是MySQL团队,在未使用调试器判定缺陷真实原因的情况下,也不能妄加猜测。

·         请在你的缺陷报告中指明,你已参阅了参考手册并寄出了档案,以便让其他人知道你已作了自行解决问题的尝试。

·         如果遇到解析错误,请仔细检查语法。如果不能找出错误出现在那里,很可能是因为你使用的MySQL服务器版本不支持你使用的语法。如果你使用的是http://dev.mysql.com/doc/上提供的当前版本和手册,不要包含你所使用的语法,MySQL服务器不支持你的查询。在这种情况下,唯一的选择是自行实施语法,或发送电子邮件至<licensing@mysql.com>,并寻求实施方案。

如果手册中涵盖了你所使用的语法,但你使用的是旧版本MySQL服务器,请检查MySQL变更史,以查看语法的实施时间。在这种情况下,可以选择升级到较新的MySQL服务器版本。请参见附录D:MySQL变更史

·         如果问题在于数据崩溃,或访问特殊表时出错,首先应使用CHECK TABLEREPAIR TABLE或myisamchk进行检查并尝试修复。请参见第5章:数据库管理

如果你使用的操作系统是Windows,请使用SHOW VARIABLES LIKE 'lower_case_table_names'命令核实“lower_case_table_names的值。

·         如果经常获得崩溃的表,请尝试找出发生的时间和原因。在这种情况下,MySQL数据目录下的错误日志可能会包含关于它的一些信息。(这是名称中包含.err后缀的文件)。请参见5.11.1节,“错误日志”。在你的缺陷报告中,请包含该文件提供的相关信息。如果在更新期间,未杀死更新进程,正常情况下,mysqld不会造成表损坏。如果你能够找到mysqld停止的原因,我们会更容易地为你提供更正它的补丁。请参见A.1节,“如何确定导致问题的原因”

·         如果可能,请下载并安装最新版本的MySQL服务器,并检查你的问题是否得到解决。所有版本的MySQL软件均经过彻底测试,并应能无故障运行。我们致力于尽可能地向后兼容,你也应能够毫不困难地在不同的MySQL版本间进行切换。请参见2.1.2节,“选择要安装的MySQL分发版”

如果你是享受支持服务的客户,请将缺陷报告交叉张贴在mysql-support@mysql.com,以获得更高的优先级,并将其张贴到恰当的邮件列表,以查看是否有人遇到了类似问题(或解决了问题)

关于通报MyODBC中存在缺陷的更多信息,请参见26.1.1.9节,“如何通报MyODBC问题或缺陷”

关于某些常见问题的解决方案,请参见附录A:问题和常见错误

将答案单独发送给你而不是发送到邮件列表时,良好的礼节是,对回答进行归纳总结并将结果发送到邮件列表,以便其他人也能从你所收到、并解决了问题的回应中受益。

1.7.1.4. 在邮件列表上回答问题的指南

如果你认为自己的解答会引起广泛关注,可以将其张贴到邮件列表,而不是直接回复请教的个人。尽量使你的解答具有普遍性,以便除初始发起人之外的其他人也能从中受益。将解答张贴到邮件列表时,请确认你的解答不是已有答案的复制品。

在你的回复中,应尽量归纳问题的基本部分,没有必要一定引用全部初始信息。

在要在打开HTML模式的情况下从浏览器张贴邮件信息。很多用户不使用浏览器来阅读邮件。

关注编程学问公众号