请注意,在启用general log的情况下启动mysqld之前,应使用myisamchk检查所有表。 请参阅第5章,MySQL服务器管理。
如果mysqld挂掉或者hang了,你应该在启用general log的情况下启动mysqld。参见5.4.3节,”普通查询日志”。当mysqld再次挂掉时,你应该检查日志文件的末尾来找出kill掉mysqld的查询。
如果你使用默认general log文件,文件会作为host_name.log存储在数据库目录。大多数情况下,是日志文件的最后一条查询kill掉了Mysqld,但是如果可能,你应该通过重新启动mysqld并从mysql命令行工具执行找到的查询来验证这一点。
你也可以尝试一个花费较长时间的命令,EXPLAIN所有的SELECT语句来保证mysqld正确使用了索引。参见13.8.2节,”explain语句”
你可以通过在启用slow query log的情况下启动mysqld来找出花费了大量时间执行的查询。参见5.4.5节,”The slow query log”。
如果你在error日志(通常在一个名为host_name.err的文件)找到了mysqld restarted文本,那么你可能已经找出了造成mysqld失败的查询。如果是这样的话,你应该使用myisamchk(第五章,mysql服务器管理)来检查你的所有表,并测试mysql日志文件中的查询来找出哪一条失败的。如果你找出这样一条查询,首先尝试升级到最新的mysql版本。如果没用,那么报告一个bug。参见1.6节,”如何报告一个bug或者问题(problem)”
如果你已经使用myisam_revover_options选项集启动了mysqld,mysql会自动检查和修复MYISAM表,如果它们被标记为”没有正确的关闭”或”崩溃”。如果是这种情况,mysql会写一个条目到hostname.err文件” Warning: Checking table …”,如果表需要修复的话,后面是Warning: Repairing table。如果您遇到很多这样的错误,而mysqld之前并没有意外挂掉,则可能是错误的,需要进一步调查。 请参见第5.1.7节“服务器命令选项”。
如果服务器检查到MYISAM表崩溃,它会写一条额外的信息到error log中,例如源文件的名字和行号,和访问这个表的线程列表。例如:Got an error from thread_id=1, mi_dynrec.c:368. 这是包含在错误报告中的有用信息。
如果mysqld意外挂掉,这并不是一个好迹象,不过这种情况下,你不应该检查Checking table…信息,而是应该找出mysqld为何挂掉。
5.9.1.6 使用服务器日志找出mysqld错误的原因
最新推荐文章于 2023-06-27 09:40:16 发布