请注意,在启用常规查询日志的情况下启动 mysqld 之前,您应该使用 myisamchk 检查所有表。请参阅 第 7 章,MySQL 服务器管理。
如果 mysqld 崩溃或挂起,您应该在启用常规查询日志的情况下启动 mysqld。请参阅 第 7.4.3 节,“常规查询日志”。当 mysqld 再次崩溃时,您可以检查日志文件末尾的查询,以查找导致 mysqld 崩溃的查询。
如果您使用默认的常规查询日志文件,则日志将存储在数据库目录中,名为
。在大多数情况下,日志文件中的最后一个查询是导致 mysqld 崩溃的查询,但如果可能,您应该通过重新启动 mysqld 并从 mysql 命令行工具执行找到的查询来验证这一点。如果这有效,您还应该测试所有未完成的复杂查询。主机名
.log
您还可以在所有需要很长时间才能执行的 SELECT
语句上尝试 EXPLAIN
命令,以确保 mysqld 正在正确使用索引。请参阅 第 15.8.2 节,“EXPLAIN 语句”。
您可以通过在启用慢查询日志的情况下启动 mysqld 来查找执行时间很长的查询。请参阅 第 7.4.5 节,“慢查询日志”。
如果您在错误日志(通常是名为
的文件)中找到文本 主机名
.errmysqld restarted
,则您可能找到了导致 mysqld 失败的查询。如果发生这种情况,您应该使用 myisamchk 检查所有表(请参阅 第 7 章,MySQL 服务器管理),并测试 MySQL 日志文件中的查询以查看是否有查询失败。如果找到这样的查询,请先尝试升级到最新的 MySQL 版本。如果这没有帮助,请报告错误,请参阅 第 1.6 节,“如何报告错误或问题”。
如果您在设置了 myisam_recover_options
系统变量的情况下启动了 mysqld,则 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 意外死亡,这不是一个好兆头,但在这种情况下,您不应该调查 正在检查表...
消息,而是应该尝试找出 mysqld 死亡的原因。