15.2.4.1 MyISAMtable 损坏

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

  • mysqld进程在写入过程中被杀死。

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

  • Hardware failures.

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

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

损坏的 table 的典型症状是:

  • 从 table 中选择数据时,出现以下错误:
Incorrect key file for table: '...'. Try to repair it
  • 查询找不到 table 中的行或返回不完整的结果。

您可以使用CHECK TABLE语句检查MyISAMtable 的运行状况,并使用REPAIR TABLE修复损坏的MyISAMtable。当mysqld未运行时,您还可以使用myisamchk命令检查或修复 table。参见第 13.7.2.2 节“ CHECK TABLE 语句”第 13.7.2.5 节“ REPAIR TABLE 语句”第 4.6.3 节“ myisamchk-MyISAMtable 维护 Util”

如果 table 经常损坏,则应尝试确定这种情况的发生原因。要知道的最重要的事情是 table 是否由于服务器崩溃而损坏。您可以通过在错误日志中查找最近的restarted mysqld消息来轻松验证这一点。如果出现这样的消息,则 table 损坏很可能是服务器死机的结果。否则,可能会在正常操作期间发生损坏。这是一个错误。您应该尝试创建一个可再现的测试用例来说明问题。参见第 B.4.3.3 节“如果 MySQLcontinue 崩溃该怎么办”第 28.5 节“调试和移植 MySQL”