请注意,在启用常规查询日志的情况下启动mysqld之前,您应该使用 myisamchk检查所有表。请参阅 第 5 章,MySQL 服务器管理。
如果mysqld死机或挂起,您应该在启用一般查询日志的情况下启动 mysqld。请参阅第 5.4.3 节,“一般查询日志”。当mysqld 再次终止时,您可以检查日志文件的末尾以查找终止mysqld的查询。
如果你使用默认的通用查询日志文件,日志存储在数据库目录中,
在大多数情况下,它是日志文件中杀死
mysqld的最后一个查询,但如果可能,你应该通过重新启动mysqld并执行找到的查询来验证这一点来自mysql命令行工具。如果这可行,您还应该测试所有未完成的复杂查询。
host_name
.log
您还可以
EXPLAIN
在所有
SELECT
需要很长时间的语句上尝试该命令,以确保mysqld正确使用索引。请参阅第 13.8.2 节,“EXPLAIN 语句”。
您可以通过在启用慢速查询日志的情况下启动mysqld 来查找执行时间较长的查询。请参阅第 5.4.5 节,“慢速查询日志”。
如果您mysqld restarted
在错误日志(通常是一个名为 的文件
)中找到文本,您可能已经找到导致
mysqld失败的查询。如果发生这种情况,您应该使用myisamchk检查所有表(请参阅
第 5 章,MySQL 服务器管理),并测试 MySQL 日志文件中的查询以查看是否失败。如果您发现这样的查询,请先尝试升级到最新的 MySQL 版本。如果这没有帮助,请报告错误,请参阅
第 1.6 节“如何报告错误或问题”。
host_name
.err
如果你用
系统变量集启动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死亡的原因。