Documentation Home
MySQL 8.0 参考手册  / 第 5 章 MySQL 服务器管理  / 5.9 调试 MySQL  / 5.9.1 调试 MySQL 服务器  /  5.8.1.6 使用服务器日志查找mysqld错误原因

5.8.1.6 使用服务器日志查找mysqld错误原因

请注意,在启用常规查询日志的情况下启动mysqld之前,您应该使用 myisamchk检查所有表。请参阅 第 5 章,MySQL 服务器管理

如果mysqld死机或挂起,您应该在启用一般查询日志的情况下启动 mysqld。请参阅第 5.4.3 节,“一般查询日志”。当mysqld 再次终止时,您可以检查日志文件的末尾以查找终止mysqld的查询。

如果你使用默认的通用查询日志文件,日志存储在数据库目录中, host_name.log在大多数情况下,它是日志文件中杀死 mysqld的最后一个查询,但如果可能,你应该通过重新启动mysqld并执行找到的查询来验证这一点来自mysql命令行工具。如果这可行,您还应该测试所有未完成的复杂查询。

您还可以 EXPLAIN在所有 SELECT需要很长时间的语句上尝试该命令,以确保mysqld正确使用索引。请参阅第 13.8.2 节,“EXPLAIN 语句”

您可以通过在启用慢速查询日志的情况下启动mysqld 来查找执行时间较长的查询。请参阅第 5.4.5 节,“慢速查询日志”

如果您mysqld restarted在错误日志(通常是一个名为 的文件 host_name.err)中找到文本,您可能已经找到导致 mysqld失败的查询。如果发生这种情况,您应该使用myisamchk检查所有表(请参阅 第 5 章,MySQL 服务器管理),并测试 MySQL 日志文件中的查询以查看是否失败。如果您发现这样的查询,请先尝试升级到最新的 MySQL 版本。如果这没有帮助,请报告错误,请参阅 第 1.6 节“如何报告错误或问题”

如果你用 系统变量集启动mysqldmyisam_recover_options,MySQL 会自动检查并尝试修复 MyISAM表,如果它们被标记为“未正确关闭”或“崩溃”。如果发生这种情况,MySQL 会在hostname.err文件 'Warning: Checking table ...'中写入一个条目,然后是Warning: Repairing table表是否需要修复。如果你遇到很多这样的错误,而mysqld之前没有意外死掉,那么一定有问题,需要进一步调查。请参阅第 5.1.6 节,“服务器命令选项”

当服务器检测到MyISAM表损坏时,它会将附加信息写入错误日志,例如源文件的名称和行号,以及访问该表的线程列表。例子:Got an error from thread_id=1, mi_dynrec.c:368。这是包含在错误报告中的有用信息。

如果mysqld确实意外死亡, 这不是一个好兆头,但在这种情况下,您不应该调查这些 Checking table...消息,而应该设法找出mysqld死亡的原因。