最常见的错误是人们不指出他们正在使用的MySQL分发的版本号,或不指出在什么平台上平台安装了 MySQL (包括平台版本号)。这是极其相关的信息,并且没有它99%错误报告是无用的!我们经常得到这样的提问“为什么它不给我工作?”,然后我们发现所需的功能还没有在该版本的 MySQL 中实现,或在一份报告中描述的一个错误已经在更新的MySQL 版本修正了。有时错误是依赖于平台,在这种情况下,不知道平台操作系统和版本号根本不可能修正任何东西。
你正在使用的 MySQL 分发的版本号(例如, MySQL 3.22.22 )。你可以执行mysqladmin version找到你正在运行哪个版本。mysqladmin可以在你的MySQL安装目录的'bin'目录下面找到。 你正在使用的机器的制造商和型号。 操作系统名字和版本。对大多数操作系统,你可以通过执行一条Unix命令uname -a 得到有关信息。 有时存储器的数量(物理和虚拟的)是有意义的,如果有疑问,包含这些值。 如果你正在使用一个MySQL源代码分发 ,则需要使用的编译器的名称和版本号。如果你有一个二进制代码的分发,就需要该分发的名字。 如果问题在编译期间发生,则包含准确的错误消息,并且也包含问题发生的文件中出错代码周围的一些上下文。 如果任何数据库表与问题有关,包含从 mysqldump --db_name tbl_name1 tbl_name2 …的输出结果。这是很容易做到的,并且它是一个获得有关任何数据库表信息的有效方法,将帮助我们创造一个匹配你所遇到问题的环境。 对于与速度或SELECT语句有关的问题,你总是应该包括EXPLAIN SELECT...的输出和至少SELECT语句产生的行数。你给出有关你的情况越多的信息,某些人越能帮助你。例如,下列的例子是一份很好的错误报告(当然它应该用与 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>
如果在运行 MySQL 时是发生问题,尝试一下提供一个重现问题的输入脚本,该脚本应该包括任何必要的源文件,重现你情况的脚本越准确越好。如果你不能提供脚本,你至少应该在你的邮件中包括从 mysqladmin variables extended-status processlist的输出以提供你的系统怎样运行! 如果你认为 MySQL 产生一个奇怪的查询结果,不仅要包含结果,而且也要包含应该是什么结果的意见和描述你意见所依据的理由。 当给出问题的一个例子时,最好使用在你的真实情况下的而不是一个新的变量名、表名等等。这个问题应该与一个变量的名、表等有关!也许这些条件是苛刻的,但是安全比担心更好。不管怎么说,提供使用你实际情况的例子应该比较容易,并且各方面来讲它对我们更好一些。如果你有不想把数据显示别人看,你可使用ftp把它上传到 ftp://www.mysql.com/pub/mysql/secret/。如果数据确实是高度机密的,甚至不想让我们看到它们,那么继续,并提供使用其它名字的例子,但是请注意这是最后选择。 如果可能,包括相关程序的所有选项,例如,指明你启动 mysqld 守护程序和运行任何 MySQL 客户程序所使用的选项,对象mysqld 和 mysql等程序和configure 的选项常常是答案的关键和至关重要的!包括他们绝对不是一个坏主意!如果你使用任何模块,例如Perl或PHP,请也包括它们的版本号。 如果你不能产生一个行数少的测试,或如果测试表太大,不能寄给邮件列表(超过10行),你应该使用mysqldump倒出(dump)数据库表并且创建“README”文件描述你的问题,用tar和gzip造创建你的文件的一个压缩的档案,并且使用ftp把档案文件转移到 ftp://www.mysql.com/pub/mysql/secret/,然后把问题的简短描述发到mysql@lists.mysql.com 。 如果你的问题与权限系统有关。请包括mysqlaccess 、mysqladmin reload的输出和所有尝试连接时得到的错误消息!当你测试你的权限时,你应该首先运行mysqlaccess。在这以后,执行 mysqladmin reload version,最后你应该尝试用你有问题的程序进行连接。 mysqlaccess 可在你的 MySQL 安装目录下的“bin”目录找到。 如果你有一个对错误的补丁程序,那最好,但是千万别假设补丁程序是我们需要的一切,或即使你不提供一些必要信息如补丁能修正的错误的前提条件,就可使用它。我们可能发现你的补丁程序问题,或者我们可能根本不理解它。如果是这样,我们不能使用它。在这里测试条件将帮助我们,这意味着补丁程序将处理一切可能出现的情况。如果我们发现了补丁不能工作的边界条件(即使很怪),它可能毫无用处。 对错误是什么、为什么发生或它依赖什么的猜测通常是错误的。我们甚至不能在没有首先使用一个调试器以确定一个错误的真正原因时做这种猜测。 在你的邮件消息说明你已经检查了参考手册和邮件归档,以便让其他人知道你自己尝试解决你的问题。 如果你得到一个parse error,请仔细检查你的语法!如果你不能它发现有什么不对,极有可能是你当前 MySQL 版本不支持你正在使用的查询。如果你正在使用最新版而且 http://www.mysql.com/doc.html 的参考手册没有涉及你正在使用的语法, MySQL 就不支持你的查询。在这种情况下,你唯一的选择是自己实现语法并邮寄过来。如果手册涉及你正在使用的语法,但是你有一个更旧版本的 MySQL ,你应该检查 MySQL 的更新历史来找出语法何时被实现。见D MySQL 变迁历史。这时你有升级到一个更新 MySQL版本的选择。 如果你有一个这样的问题:当你存取某些特定数据库表时,你的数据好像已破坏或出错,你应该首先用myisamchk检查然后尝试修复你的数据库表。见 13 维护 MySQL 安装. 你经常得到破坏了的数据库表,你应该尝试发现这何时和为何发生!此时“mysql-data-directory/'hostname'.err”文件可能包含所发生事情的一些信息。请在你的错误报告包含这个文件的任何有用信息!如果没有在更新当中杀死了mysqld,通常应该绝对不破坏数据库表!如果你能找出mysqld为什么死掉的原因,对于我们,更容易向你提供对问题的修正! 如果可能,下载最新版本的 MySQL ,并且检查它是否解决你的问题。MySQL的所有版本都被彻底地测试并且应该毫无问题地运行!我们相信使一切尽可能向后兼容,并且你应该能在数分钟内切换 MySQL 版本!见 4.3 要使用 MySQL 哪个版本。 如果你是一个支持客户,请直接邮寄错误报告到适当的邮件列表,看看是否有其他人有这个问题的经验(或许已经解决)。