MyISAM表损坏
即使MyISAM
表格式非常可靠(SQL语句对表所做的所有更改都在该语句返回之前写入),但是如果发生以下任何事件,您仍然会损坏表:
- 该mysqld的进程在写中间被杀害。
- 发生计算机意外关机(例如,计算机已关闭)。
- 硬件故障。
- 您正在使用外部程序(例如myisamchk)来修改服务器正在同时修改的表。
- MySQL或
MyISAM
代码中的软件错误。
损坏的表的典型症状是:
从表中选择数据时,出现以下错误:
Incorrect key file for table: '...'. Try to repair it
- 查询找不到表中的行或返回不完整的结果。
您可以MyISAM
使用该CHECK TABLE
语句检查表的运行状况,并使用修复损坏的MyISAM
表REPAIR TABLE
。当mysqld未运行时,您也可以使用myisamchk命令检查或修复表。请参见“ CHECK TABLE语句”,“ REPAIR TABLE语句”和“myisamchk-MyISAM表维护实用程序”。
如果表经常损坏,则应尝试确定为什么会发生这种情况。要知道的最重要的事情是表是否由于服务器崩溃而损坏。您可以通过restarted mysqld
在错误日志中查找最近的消息来轻松验证这一点。如果出现这样的消息,则表损坏很可能是服务器死机的结果。否则,可能会在正常操作期间发生损坏。这是一个错误。您应该尝试创建一个可再现的测试用例来演示该问题。请参见第B.4.3.3节“如果MySQL继续崩溃,该怎么办”和“调试和移植MySQL”。