corrupted-myisam-tables.md 1.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#### 16.2.4.1 损坏的 MyISAM 表

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

-[**mysqld**](mysqld.html)进程在写入过程中被杀死。

-   发生意外的计算机关闭(例如,计算机已关闭)。

-   硬件故障。

-   您正在使用外部程序(例如[**迈萨姆奇克**](myisamchk.html)) 来修改同时被服务器修改的表。

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

    损坏表的典型症状是:

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

    ```
    Incorrect key file for table: '...'. Try to repair it
    ```

-   查询不会在表中找到行或返回不完整的结果。

    你可以检查一个健康`MyISAM`表使用[`检查表`](check-table.html)声明,并修复损坏的`MyISAM`表与[`维修台`](repair-table.html).什么时候[**mysqld**](mysqld.html)没有运行,你也可以检查或修复一个表[**迈萨姆奇克**](myisamchk.html)命令。看[第 13.7.3.2 节,“CHECK TABLE 语句”](check-table.html),[第 13.7.3.5 节,“REPAIR TABLE 语句”](repair-table.html), 和[第 4.6.4 节,“myisamchk - MyISAM 表维护实用程序”](myisamchk.html).

    如果您的表经常损坏,您应该尝试确定发生这种情况的原因。要知道的最重要的事情是表是否由于意外的服务器退出而损坏。您可以通过查找最近的`重启mysqld`错误日志中的消息。如果有这样的消息,很可能表损坏是服务器死机的结果。否则,可能在正常操作期间发生损坏。这是一个错误。您应该尝试创建一个可重现的测试用例来演示该问题。看[第 B.3.3.3 节,“如果 MySQL 不断崩溃怎么办”](crashing.html), 和[第 5.9 节,“调试 MySQL”](debugging-mysql.html).