注意,在启用通用查询日志之前,您应该使用 myisamchk 检查所有表格。见 第 7 章,MySQL 服务器管理。
如果 mysqld 死亡或挂起,您应该启用通用查询日志,然后重新启动 mysqld。见 第 7.4.3 节,“通用查询日志”。当 mysqld 再次死亡时,您可以检查日志文件的结尾,以找到杀死 mysqld 的查询。
如果您使用默认的通用查询日志文件,日志将存储在数据库目录中,名为
在大多数情况下,日志文件中的最后一个查询是杀死 mysqld 的,但如果可能,您应该通过重新启动 mysqld 并从 mysql 命令行工具中执行找到的查询来验证。主机名
.log
您也可以尝试在所有耗时较长的 SELECT
语句上使用 EXPLAIN
,以确保 mysqld 正确地使用索引。见 第 15.8.2 节,“EXPLAIN 语句”。
您可以通过启用慢查询日志来找到执行时间较长的查询。见 第 7.4.5 节,“慢查询日志”。
如果您在错误日志中(通常是一个名为
的文件)找到文本 主机名
.errmysqld restarted
,您可能已经找到了一条导致 mysqld 失败的查询。如果发生这种情况,您应该使用 myisamchk 检查所有表格(见 第 7 章,MySQL 服务器管理),并测试 MySQL 日志文件中的查询,以查看哪一个失败。如果您找到这样的查询,请首先尝试升级到最新的 MySQL 版本。如果这不起作用,请报告错误,见 第 1.5 节,“如何报告错误或问题”。
如果您已经启用了 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 意外死亡,这不是一个好兆头,但是在这种情况下,您不应该调查 检查表...
消息,而应该尝试找出为什么 mysqld 死亡。