📄 manual_questions.html
字号:
<h2><a NAME="Bug_reports" HREF="manual_toc.html#Bug_reports">2.3 怎样报告错误或问题</a></h2>
<p>写一份好的错误报告需要耐心,但是第一次就做得正确可节省你我的时间。本节将帮助你正确撰写你的报告,以使你不浪费时间,也可能做一些根本不能帮助我们的事情。</p>
<p>如果可能的话,我们鼓励每个人使用<code> mysqlbug </code>脚本产生一份错误报告(或关于任何问题的一份报告)。<code>mysqlbug</code>可在源代码分发或二进制分发的<strong> MySQL</strong>安装目录<tt>下的'bin'</tt>目录中的<tt>'scripts'</tt>
目录下找到。如果你不能使用<code>mysqlbug,</code>你仍然应该包括在本节列出的所有必要的信息。</p>
<p><code>mysqlbug </code>脚本通过自动确定下列很多信息来帮助你生成一份报告,但是如果一些重要的东西不见了,请在你的消息中包含它!请仔细阅读本节并且保证这里描述的所有信息包含在你的报告中。</p>
<p>要记住,有可能回复一条包含太多的信息消息,但不回复包含极少信息的消息,因为人们认为他们知道一个问题的原因并且假设某些细节无所谓,所以他们常常忽略事实。一个好的原则是:如果你怀疑所说的事情,继续说!在你的报告中写上几行,比因为第一次没有包含足够的信息而被迫追问和等待答案要快上千倍,而且少些麻烦。</p>
<p>最常见的错误是人们不指出他们正在使用的<strong>MySQL</strong>分发的版本号,或不指出在什么平台上平台安装了<strong> MySQL </strong>(包括平台版本号)。这是极其相关的信息,并且没有它99%错误报告是无用的!我们经常得到这样的提问“为什么它不给我工作?”,然后我们发现所需的功能还没有在该版本的<strong> MySQL </strong>中实现,或在一份报告中描述的一个错误已经在更新的<strong>MySQL </strong>版本修正了。有时错误是依赖于平台,在这种情况下,不知道平台操作系统和版本号根本不可能修正任何东西。</p>
<p>还要记住,要提供你的编译器信息,如果它与问题有关。人们经常发现错在编译器而认为<strong>MySQL</strong>的问题。大多数编译器始终都在开发中并且随版本也逐渐变得更好。为了确定决定你的问题是否依赖于你的编译器,我们需要知道使用什么编译器。注意每个编译器得问题应该被认为是一个错误,因此要报告。</p>
<p>在错误报告中包含一个问题的完好描述是最有帮助的。即,你所做的导致这个问题的一个好的例子和确切描述的问题本身。最好的报告是包括显示如何再次产生错误或问题的一个完整例子。</p>
<p>如果一个程序产生一条错误信息,非常重要的是在你的错误报告中要包含它!如果我们试着从使用程序的档案中找一些东西,最好是报告的错误消息精确地匹配程序所产生的。(甚至注意大小写!)你决不应该试图记住错误消息是什么,相反,将全部消息拷贝并且粘贴进你的报告中!</p>
<p>如果你有一个MyODBC问题,你应该尝试产生一个 MyODBC 跟踪文件,详见<a
HREF="manual_ODBC.html#MyODBC_bug_report">16.6 报告 MyODBC的问题</a>. </p>
<p>请记住,将要阅读你报告的人有很多使用80列显示。在产生报告或使用<code>mysql</code>命令行工具的例子时,你应该为那些可能超出显示可用宽度的输出(例如,<code>EXPLAIN
SELECT</code>语句,见下面的例子)使用<code>--vertical</code>选项(或<code>\G</code>语句终止符)。</p>
<p>请在你的报告中包括下列信息:
<ul>
<li>你正在使用的<strong> MySQL </strong>分发的版本号(例如,<strong> MySQL </strong> 3.22.22 )。你可以执行<code>mysqladmin
version</code>找到你正在运行哪个版本。<code>mysqladmin</code>可以在你的<strong>MySQL</strong>安装目录<tt>的'bin'</tt>目录下面找到。</li>
<li>你正在使用的机器的制造商和型号。</li>
<li>操作系统名字和版本。对大多数操作系统,你可以通过执行一条Unix命令<code>uname -a</code>
得到有关信息。 </li>
<li>有时存储器的数量(物理和虚拟的)是有意义的,如果有疑问,包含这些值。</li>
<li>如果你正在使用一个<strong>MySQL</strong>源代码分发<strong> </strong>,则需要使用的编译器的名称和版本号。如果你有一个二进制代码的分发,就需要该分发的名字。</li>
<li>如果问题在编译期间发生,则包含准确的错误消息,并且也包含问题发生的文件中出错代码周围的一些上下文。</li>
<li>如果任何数据库表与问题有关,包含从<code> mysqldump --db_name tbl_name1 tbl_name2 …</code>的输出结果。这是很容易做到的,并且它是一个获得有关任何数据库表信息的有效方法,将帮助我们创造一个匹配你所遇到问题的环境。</li>
<li>对于与速度或<code>SELECT</code>语句有关的问题,你总是应该包括<code>EXPLAIN
SELECT...</code>的输出和至少<code>SELECT</code>语句产生的行数。你给出有关你的情况越多的信息,某些人越能帮助你。例如,下列的例子是一份很好的错误报告(当然它应该用与<code> mysqlbug </code>脚本邮寄):运行<code> mysql </code>命令行工具的例子(注意对其输出超过80列显示设备的语句使用<code>\G</code>终止符):<pre>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>
</pre>
</li>
</ul>
<ul>
<li>如果在运行<strong> MySQL </strong>时是发生问题,尝试一下提供一个重现问题的输入脚本,该脚本应该包括任何必要的源文件,重现你情况的脚本越准确越好。如果你不能提供脚本,你至少应该在你的邮件中包括从<code> mysqladmin variables
extended-status processlist</code>的输出以提供你的系统怎样运行!</li>
<li>如果你认为<strong> MySQL </strong>产生一个奇怪的查询结果,不仅要包含结果,而且也要包含应该是什么结果的意见和描述你意见所依据的理由。</li>
<li>当给出问题的一个例子时,最好使用在你的真实情况下的而不是一个新的变量名、表名等等。这个问题应该与一个变量的名、表等有关!也许这些条件是苛刻的,但是安全比担心更好。不管怎么说,提供使用你实际情况的例子应该比较容易,并且各方面来讲它对我们更好一些。如果你有不想把数据显示别人看,你可使用<code>ftp</code>把它上传到<a
HREF="http://ftp@www.mysql.com/pub/mysql/secret/default.htm">ftp://www.mysql.com/pub/mysql/secret/</a>。如果数据确实是高度机密的,甚至不想让我们看到它们,那么继续,并提供使用其它名字的例子,但是请注意这是最后选择。</li>
<li>如果可能,包括相关程序的所有选项,例如,指明你启动<code> mysqld </code>守护程序和运行任何<strong> MySQL </strong>客户程序所使用的选项,对象<code>mysqld</code>
和 <code>mysql</code>等程序和<code>configure</code>
的选项常常是答案的关键和至关重要的!包括他们绝对不是一个坏主意!如果你使用任何模块,例如Perl或PHP,请也包括它们的版本号。</li>
<li>如果你不能产生一个行数少的测试,或如果测试表太大,不能寄给邮件列表(超过10行),你应该使用<code>mysqldump</code>倒出(dump)数据库表并且创建<tt>“README”</tt>文件描述你的问题,用<code>tar</code>和<code>gzip</code>造创建你的文件的一个压缩的档案,并且使用<code>ftp</code>把档案文件转移到<a
HREF="http://ftp@www.mysql.com/pub/mysql/secret/default.htm">ftp://www.mysql.com/pub/mysql/secret/</a>,然后把问题的简短描述发到<a
HREF="mailto:mysql@lists.mysql.com">mysql@lists.mysql.com </a>。 </li>
<li>如果你的问题与权限系统有关。请包括<code>mysqlaccess </code>、<code>mysqladmin reload</code>的输出和所有尝试连接时得到的错误消息!当你测试你的权限时,你应该首先运行<code>mysqlaccess</code>。在这以后,执行<code> mysqladmin reload
version</code>,最后你应该尝试用你有问题的程序进行连接。<code> mysqlaccess </code>可在你的<strong> MySQL </strong>安装目录下的<tt>“bin”</tt>目录找到。</li>
<li>如果你有一个对错误的补丁程序,那最好,但是千万别假设补丁程序是我们需要的一切,或即使你不提供一些必要信息如补丁能修正的错误的前提条件,就可使用它。我们可能发现你的补丁程序问题,或者我们可能根本不理解它。如果是这样,我们不能使用它。在这里测试条件将帮助我们,这意味着补丁程序将处理一切可能出现的情况。如果我们发现了补丁不能工作的边界条件(即使很怪),它可能毫无用处。</li>
<li>对错误是什么、为什么发生或它依赖什么的猜测通常是错误的。我们甚至不能在没有首先使用一个调试器以确定一个错误的真正原因时做这种猜测。</li>
<li>在你的邮件消息说明你已经检查了参考手册和邮件归档,以便让其他人知道你自己尝试解决你的问题。</li>
<li>如果你得到一<code>个parse error</code>,请仔细检查你的语法!如果你不能它发现有什么不对,极有可能是你当前<strong> MySQL </strong>版本不支持你正在使用的查询。如果你正在使用最新版而且<a
HREF="http://www.mysql.com/doc.html"> http://www.mysql.com/doc.html </a>的参考手册没有涉及你正在使用的语法,<strong> MySQL </strong>就不支持你的查询。在这种情况下,你唯一的选择是自己实现语法并邮寄过来。如果手册涉及你正在使用的语法,但是你有一个更旧版本的<strong> MySQL </strong>,你应该检查<strong> MySQL </strong>的更新历史来找出语法何时被实现。见<a
HREF="manual_News.html#News">D MySQL 变迁历史</a>。这时你有升级到一个更新<strong> MySQL</strong>版本的选择。</li>
<li>如果你有一个这样的问题:当你存取某些特定数据库表时,你的数据好像已破坏或出错,你应该首先用<code>myisamchk</code>检查然后尝试修复你的数据库表<code>。</code>见<a
HREF="manual_Maintenance.html#Maintenance"> 13 维护 MySQL 安装</a>.
</li>
<li>你经常得到破坏了的数据库表,你应该尝试发现这何时和为何发生!此时<tt>“mysql-data-directory/'hostname'.err”</tt>文件可能包含所发生事情的一些信息。请在你的错误报告包含这个文件的任何有用信息!如果没有在更新当中杀死了<code>mysqld</code>,通常应该<strong>绝对不</strong>破坏数据库表!如果你能找出<code>mysqld为什么</code>死掉的原因,对于我们,更容易向你提供对问题的修正!</li>
<li>如果可能,下载最新版本的<strong> MySQL </strong>,并且检查它是否解决你的问题。<strong>MySQL</strong>的所有版本都被彻底地测试并且应该毫无问题地运行!我们相信使一切尽可能向后兼容,并且你应该能在数分钟内切换<strong> MySQL </strong>版本!见<a
HREF="manual_Installing.html#Which_version"> 4.3 要使用 MySQL 哪个版本</a>。
</li>
</ul>
<p>如果你是一个支持客户,请直接邮寄错误报告到适当的邮件列表,看看是否有其他人有这个问题的经验(或许已经解决)。</p>
<p>对于报导<strong>MyODBC</strong>错误的信息,见<a
HREF="manual_ODBC.html#ODBC_Problems"> 16.2 怎样报告 MyODBC 问题</a>。
</p>
<p>一些常见问题的答案,见<a HREF="manual_Problems.html#Problems"> 18
问题和常见的错误</a>。</p>
<p>当答案个别发给你而不是邮件列表时,总结答案并且将总结发到邮件列表以便其它人可以从你收到的帮助你解决问题的答案中受益,这被认为是一个很好的规矩。</p>
<p><a NAME="IDX13"></a></p>
<h2><a NAME="Answering_questions" HREF="manual_toc.html#Answering_questions">2.4 在邮件列表上回答问题的指南</a></h2>
<p>如果你认为你的答案引起广泛的兴趣,你可能想要把它寄到邮件列表中而不是直接答复提问的人。试着让你的答案足够普遍,让不是邮寄者的其他人可从它获益。当你邮寄到邮件列表时,请保证你的回答不和以前的答案重复。</p>
<p>尝试总结在你的答复中的问题的主要部分,别感觉不好意思引用全部原文消息。</p>
<p>请不要从有 HTML 模式的浏览器投寄邮件消息!许多用户不用浏览器读邮件!<a
NAME="IDX14"></a><a NAME="IDX15"></a></p>
<hr>
<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Introduction.html">前一章</a>,
<a HREF="manual_Licensing_and_Support.html">下一章</a>, <a
HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目录</a>. </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -