E. 移植到其他系统 / E.1. 调试MySQL服务器 / E.1.5. 使用日志文件找出mysqld出错原因

注意,在带--log选项启动 mysqld之前,你应该用myisamchk检查所有的表。请参阅第5章:数据库管理.

如果 mysqld 死了或挂起,你应该用--log启动 mysqld 。当mysqld 再次死掉时,你可以检查日志文件的最后,找出杀掉mysqld的查询。

如果你不带文件名使用 --log ,日志被保存在名为host_name.log的数据库目录里。在多数情况下,日志文件中的最后一个查询杀掉mysqld,但如果有可能,你应该重启mysqld并从mysq命令行工具执行找到的查询来验证一下。如果这个查询杀掉了mysqld,你也应该测试所有没有完成的复杂查询

你也可以在所有占用长时间的SELECT声明上用命令EXPLAIN来确认 mysqld正适当地使用索引。请参阅7.2.1节,“EXPLAIN 语法(获得关于SELECT的信息)”

你可以带 --log-slow-queries启动mysqld来找出占用长时间来执行的查询。请参阅5.11.4节 ,“缓慢查询日志”

如果你在错误日志文件(通常名为hostname.err)中发现 mysqld restarted 字样,你大致已经找到导致mysqld的查询。如果发生这种情况,你应该用myisamchk检查所有表(参阅 第5章:数据库管理),并在MySQL日志文件中测试这些查询看是否有不执行的。如果找到这样一个查询,试着升级到最新的MySQL版本。如果这样不能帮助你,你不能在mysql邮件存档中发现任何相关内容,你应该把缺陷报告给MySQL邮件列表。邮件列表在http://lists.mysql.com/订阅,这个地址上也有连到在线列表存档的链接。

如果你已经用myisam-recover启动了mysqld,MySQL自动检查并试着修复MyISAM 表,看是否它们被标志为“未正常关闭”或“崩溃”。如果发生这种情况,MySQL在文件hostname.err 写一个条目'Warning: Checking table ...',后面跟着警告:如果表需要修复,请修复它。如果你遇上大量的这些错误而mysqld没有意外死掉,那就是有问题了,需要进一步调查。请参阅5.3.1节,“mysqld命令行选项”

如果mysqld意外死掉,这可不是一个好兆头,但在这种情况下不用研究Checking table...信息,而是要找出mysqld为什么死掉。