Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Using Server Logs to Find Causes of Errors in mysqld

7.9.1.6 使用服务器日志查找 mysqld 中错误的原因

注意,在启用一般查询日志后启动mysqld之前,您应该检查所有表格使用myisamchk。请参阅第7章,《MySQL 服务器管理》

如果mysqld崩溃或挂起,您应该启动mysqld并启用一般查询日志。请参阅第7.4.3节,“General Query Log”。当mysqld再次崩溃时,您可以检查日志文件的末尾,以确定杀死mysqld的查询。

如果使用默认的general query log文件,日志将存储在数据库目录中,以host_name.log的形式。在大多数情况下,日志文件中的最后一个查询将杀死mysqld,但如果可能,您应该验证这个查询是否正确。您可以重新启动mysqld并使用mysql命令行工具执行该查询。如果这worked,您也应该测试所有复杂的查询,以确保mysqld使用了正确的索引。请参阅EXPLAIN语句的Section 15.8.2

您也可以使用EXPLAIN语句来检查所有SELECT语句,以确保mysqld使用了正确的索引。请参阅Section 15.8.2

您可以通过启动mysqld并启用慢查询日志来找到执行时间长的查询。请参阅Section 7.4.5

如果您在错误日志(通常是一个名为主机名.err)中找到文本mysqld restarted,那么您可能已经找到了一条查询语句,该语句导致mysqld失败。如果发生这种情况,您应该检查所有表格使用myisamchk(见第7章,《MySQL 服务器管理》),并在 MySQL 日志文件中测试查询语句,以查看是否有一条语句失败。如果您找到这样的一条语句,首先尝试升级到最新的 MySQL 版本。如果这不起作用,请报告错误,见第1.6节,“如何报告错误或问题”

如果您使用mysqld启动了myisam_recover_options系统变量,您的 MySQL 自动检查并尝试修复MyISAM表,如果它们标记为‘未正确关闭’或‘崩溃’。如果发生这种情况,MySQL 将在hostname.err文件中写入一条条目'Warning: Checking table ...',如果表需要修复,则写入Warning: Repairing table。如果您收到大量这些错误,而mysqld没有意外死亡,就前一刻,那么某些事情出了问题,需要进一步调查。见第7.1.7节,“服务器命令选项”

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

如果mysqld意外死亡,这不是一个好兆,您应该不调查Checking table...消息,而是尝试找到mysqld死亡的原因。