#### 16.2.4.2 表未正确关闭的问题

每个`MyISAM`索引文件（`。我的我`file) 在标题中有一个计数器，可用于检查表是否已正确关闭。如果您收到以下警告[`检查表`](check-table.html)要么[**迈萨姆奇克**](myisamchk.html)，这意味着这个计数器已经不同步：

```
clients are using or haven't closed the table properly
```

此警告并不一定意味着表已损坏，但您至少应该检查表。

计数器的工作原理如下：

-   第一次在 MySQL 中更新表时，索引文件头中的计数器会递增。

-   在进一步更新期间不会更改计数器。

-   当表的最后一个实例关闭时（因为[`同花顺表`](flush.html#flush-tables)操作已执行或因为表缓存中没有空间），如果表已在任何时候更新，则计数器会递减。

-   当您修表或检查表并发现没有问题时，计数器将重置为零。

-   为避免与可能检查表的其他进程交互时出现问题，如果计数器为零，则计数器不会在关闭时递减。

    换句话说，只有在以下情况下，计数器才会变得不正确：

-   一种`MyISAM`表被复制而不首先发布[`锁定表`](lock-tables.html)和[`同花顺表`](flush.html#flush-tables).

-   MySQL 在更新和最终关闭之间崩溃。（该表可能仍然没问题，因为 MySQL 总是为每个语句之间的所有内容发出写入。）

-   一个表被修改[**myisamchk --recover**](myisamchk.html)要么[**myisamchk --更新状态**](myisamchk.html)在它被使用的同时[**mysqld**](mysqld.html).

-   多种的[**mysqld**](mysqld.html)服务器正在使用该表，并且一台服务器执行了[`维修台`](repair-table.html)要么[`检查表`](check-table.html)在另一台服务器使用时放在桌子上。在此设置中，可以安全使用[`检查表`](check-table.html)，尽管您可能会收到来自其他服务器的警告。然而，[`维修台`](repair-table.html)应该避免，因为当一台服务器用新的数据文件替换数据文件时，其他服务器不知道这一点。

    通常，在多个服务器之间共享数据目录是一个坏主意。看[第 5.8 节，“在一台机器上运行多个 MySQL 实例”](multiple-servers.html), 以供进一步讨论。
