16.2.4.1 损坏的 MyISAM 表

即使MyISAM表格式非常可靠(SQL 语句对表所做的所有更改都在语句返回之前写入),但如果发生以下任何事件,您仍然会得到损坏的表:

  • mysqld进程在写入过程中被终止 。

  • 计算机意外关机(例如,计算机关闭)。

  • 硬件故障。

  • 您正在使用外部程序(例如 myisamchk)来修改正在被服务器同时修改的表。

  • MySQL 或MyISAM 代码中的软件错误。

损坏表的典型症状是:

  • 从表中选择数据时出现以下错误:

    Incorrect key file for table: '...'. Try to repair it
  • 查询在表中找不到行或返回不完整的结果。

MyISAM您可以使用该语句 检查表的健康状况CHECK TABLE,并使用 修复损坏的MyISAMREPAIR TABLE。当 mysqld未运行时,您还可以使用myisamchk命令检查或修复表。参见第 13.7.3.2 节,“CHECK TABLE 语句”第 13.7.3.5 节,“REPAIR TABLE 语句”第 4.6.4 节,“myisamchk — MyISAM 表维护实用程序”

如果您的表经常损坏,您应该尝试确定发生这种情况的原因。最重要的是要知道表是否由于意外的服务器退出而损坏。restarted mysqld您可以通过在错误日志中查找最近的消息来轻松验证这一点。如果有这样的消息,很可能表损坏是服务器死掉的结果。否则,在正常操作期间可能会发生损坏。这是一个错误。您应该尝试创建一个可重现的测试用例来演示问题。请参阅第 B.3.3.3 节,“如果 MySQL 持续崩溃怎么办”第 5.9 节,“调试 MySQL”