### 4.6.4 myisamchk — MyISAM 表维护实用程序

[4.6.4.1 myisamchk 常规选项](myisamchk-general-options.html)
[4.6.4.2 myisamchk 检查选项](myisamchk-check-options.html)
[4.6.4.3 myisamchk 修复选项](myisamchk-repair-options.html)
[4.6.4.4 其他 myisamchk 选项](myisamchk-other-options.html)
[4.6.4.5 使用 myisamchk 获取表信息](myisamchk-table-info.html)
[4.6.4.6 myisamchk 内存使用](myisamchk-memory.html)

[](<>)

这[**迈萨姆奇克**](myisamchk.html)实用程序获取有关您的数据库表或检查、修复或优化它们的信息。[**迈萨姆奇克**](myisamchk.html)与`MyISAM`表（具有`.MYD`和`。我的我`用于存储数据和索引的文件）。

您还可以使用[`检查表`](check-table.html)和[`维修台`](repair-table.html)检查和维修的声明`MyISAM`表。看[第 13.7.3.2 节，“CHECK TABLE 语句”](check-table.html)， 和[第 13.7.3.5 节，“REPAIR TABLE 语句”](repair-table.html).

指某东西的用途[**迈萨姆奇克**](myisamchk.html)不支持分区表。

警告

最好在执行表修复操作之前对表进行备份；在某些情况下，该操作可能会导致数据丢失。可能的原因包括但不限于文件系统错误。

调用[**迈萨姆奇克**](myisamchk.html)像这样：

```
myisamchk [options] tbl_name ...
```

这*`选项`*指定你想要的[**迈萨姆奇克**](myisamchk.html)去做。它们在以下部分中进行描述。您还可以通过调用获取选项列表[**myisamchk--帮助**](myisamchk.html).

没有选择，[**迈萨姆奇克**](myisamchk.html)只需检查您的表作为默认操作。获取更多信息或告诉[**迈萨姆奇克**](myisamchk.html)要采取纠正措施，请按照以下讨论中的说明指定选项。

*`tbl_name`*是您要检查或修复的数据库表。如果你跑[**迈萨姆奇克**](myisamchk.html)在数据库目录以外的地方，您必须指定数据库目录的路径，因为[**迈萨姆奇克**](myisamchk.html)不知道数据库在哪里。实际上，[**迈萨姆奇克**](myisamchk.html)实际上并不关心您正在处理的文件是否位于数据库目录中。您可以将与数据库表对应的文件复制到其他位置并在那里对其执行恢复操作。

您可以在[**迈萨姆奇克**](myisamchk.html)如果您愿意，可以使用命令行。您还可以通过命名表的索引文件（带有`。我的我`后缀）。这使您可以使用模式指定目录中的所有表`*。我的我`.例如，如果您在数据库目录中，则可以检查所有`MyISAM`该目录中的表如下所示：

```
myisamchk *.MYI
```

如果您不在数据库目录中，则可以通过指定目录的路径来检查那里的所有表：

```
myisamchk /path/to/database_dir/*.MYI
```

您甚至可以通过指定 MySQL 数据目录路径的通配符来检查所有数据库中的所有表：

```
myisamchk /path/to/datadir/*/*.MYI
```

推荐的快速检查所有方法`MyISAM`表是：

```
myisamchk --silent --fast /path/to/datadir/*/*.MYI
```

如果你想检查所有`MyISAM`表并修复任何损坏的，您可以使用以下命令：

```
myisamchk --silent --force --fast --update-state \
          --key_buffer_size=64M --myisam_sort_buffer_size=64M \
          --read_buffer_size=1M --write_buffer_size=1M \
          /path/to/datadir/*/*.MYI
```

此命令假定您有超过 64MB 的可用空间。有关内存分配的更多信息[**迈萨姆奇克**](myisamchk.html)， 看[第 4.6.4.6 节，“myisamchk 内存使用”](myisamchk-memory.html).

有关使用的更多信息[**迈萨姆奇克**](myisamchk.html)， 看[第 7.6 节，“MyISAM 表维护和崩溃恢复”](myisam-table-maintenance.html).

重要的

*您必须确保在运行时没有其他程序正在使用这些表[**迈萨姆奇克**](myisamchk.html)*.这样做最有效的方法是在运行时关闭 MySQL 服务器[**迈萨姆奇克**](myisamchk.html)，或锁定所有表[**迈萨姆奇克**](myisamchk.html)正在使用。

否则，当你运行[**迈萨姆奇克**](myisamchk.html)，它可能会显示以下错误消息：

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

这意味着您正在尝试检查已由另一个程序更新的表（例如[**mysqld**](mysqld.html)服务器）尚未关闭文件或在未正确关闭文件的情况下死亡，这有时会导致一个或多个损坏`MyISAM`表。

如果[**mysqld**](mysqld.html)正在运行，您必须通过使用强制它刷新仍缓冲在内存中的任何表修改[`同花顺表`](flush.html#flush-tables).然后，您应该确保在运行时没有人在使用这些表[**迈萨姆奇克**](myisamchk.html)

但是，避免此问题的最简单方法是使用[`检查表`](check-table.html)代替[**迈萨姆奇克**](myisamchk.html)检查表。看[第 13.7.3.2 节，“CHECK TABLE 语句”](check-table.html).

[**迈萨姆奇克**](myisamchk.html)支持以下选项，可以在命令行中指定，也可以在`[myisamchk]`一组选项文件。有关 MySQL 程序使用的选项文件的信息，请参阅[第 4.2.2.2 节，“使用选项文件”](option-files.html).

[](<>)

**表 4.19 myisamchk 选项**

| 选项名称 | 描述 |
| ---- | --- |
| [--分析](myisamchk-other-options.html#option_myisamchk_analyze) | 分析关键值的分布 |
| [--备份](myisamchk-repair-options.html#option_myisamchk_backup) | 将 .MYD 文件备份为文件\_名称时间.BAK |
| [--块搜索](myisamchk-other-options.html#option_myisamchk_block-search) | 查找给定偏移处的块所属的记录 |
| [--查看](myisamchk-check-options.html#option_myisamchk_check) | 检查表格是否有错误 |
| [--check-only-changed](myisamchk-check-options.html#option_myisamchk_check-only-changed) | 仅检查自上次检查以来已更改的表 |
| [--正确校验和](myisamchk-repair-options.html#option_myisamchk_correct-checksum) | 更正表的校验和信息 |
| [--数据文件长度](myisamchk-repair-options.html#option_myisamchk_data-file-length) | 数据文件的最大长度（当数据文件已满时重新创建时） |
| [--调试](myisamchk-general-options.html#option_myisamchk_debug) | 写调试日志 |
| --解码\_位 | 解码\_位 |
| [--defaults-额外文件](myisamchk-general-options.html#option_myisamchk_defaults-extra-file) | 除了通常的选项文件外，还读取命名的选项文件 |
| [--默认文件](myisamchk-general-options.html#option_myisamchk_defaults-file) | 只读命名选项文件 |
| [--defaults-组后缀](myisamchk-general-options.html#option_myisamchk_defaults-group-suffix) | 选项组后缀值 |
| [--描述](myisamchk-other-options.html#option_myisamchk_description) | 打印有关表格的一些描述性信息 |
| [--扩展检查](myisamchk-check-options.html#option_myisamchk_extend-check) | 进行非常彻底的表检查或修复，尝试从数据文件中恢复每个可能的行 |
| [--快速地](myisamchk-check-options.html#option_myisamchk_fast) | 仅检查未正确关闭的表 |
| [--力量](myisamchk-check-options.html#option_myisamchk_force) | 如果 myisamchk 在表中发现任何错误，则自动执行修复操作 |
| --力量 | 覆盖旧的临时文件。与 -r 或 -o 选项一起使用 |
| --英尺\_最大限度\_单词\_连 | FULLTEXT 索引的最大字长 |
| --英尺\_分钟\_单词\_连 | FULLTEXT 索引的最小字长 |
| --英尺\_停用词\_文件 | 使用此文件中的停用词而不是内置列表 |
| [--帮助](myisamchk-general-options.html#option_myisamchk_HELP) | 显示帮助信息并退出 |
| [--帮助](myisamchk-general-options.html#option_myisamchk_help) | 显示帮助信息并退出 |
| [--信息](myisamchk-check-options.html#option_myisamchk_information) | 打印有关已检查表的信息统计信息 |
| --钥匙\_缓冲\_尺寸 | 用于 MyISAM 表的索引块的缓冲区大小 |
| [--keys-使用](myisamchk-repair-options.html#option_myisamchk_keys-used) | 指示要更新哪些索引的位值 |
| [--最大记录长度](myisamchk-repair-options.html#option_myisamchk_max-record-length) | 如果 myisamchk 无法分配内存来保存它们，则跳过大于给定长度的行 |
| [--中等检查](myisamchk-check-options.html#option_myisamchk_medium-check) | 进行比 --extend-check 操作更快的检查 |
| --myisam\_堵塞\_尺寸 | 用于 MyISAM 索引页的块大小 |
| --myisam\_种类\_缓冲\_尺寸 | 在执行 REPAIR 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时对索引进行排序时分配的缓冲区 |
| [--无默认值](myisamchk-general-options.html#option_myisamchk_no-defaults) | 不读取选项文件 |
| [--并行恢复](myisamchk-repair-options.html#option_myisamchk_parallel-recover) | 使用与 -r 和 -n 相同的技术，但使用不同的线程并行创建所有键（测试版） |
| [--打印默认值](myisamchk-general-options.html#option_myisamchk_print-defaults) | 打印默认选项 |
| [--快的](myisamchk-repair-options.html#option_myisamchk_quick) | 通过不修改数据文件实现更快的修复 |
| --读\_缓冲\_尺寸 | 执行顺序扫描的每个线程为其扫描的每个表分配此大小的缓冲区 |
| [--只读](myisamchk-check-options.html#option_myisamchk_read-only) | 不要将表格标记为已选中 |
| [--恢复](myisamchk-repair-options.html#option_myisamchk_recover) | 进行可以修复几乎所有问题的修复，除了不唯一的唯一键 |
| [--安全恢复](myisamchk-repair-options.html#option_myisamchk_safe-recover) | 使用旧的恢复方法进行修复，该方法按顺序读取所有行并根据找到的行更新所有索引树 |
| [--set-auto-increment](myisamchk-other-options.html#option_myisamchk_set-auto-increment) | 强制自动\_新记录的增量编号从给定值开始 |
| [--set-collat​​ion](myisamchk-repair-options.html#option_myisamchk_set-collation) | 指定用于排序表索引的排序规则 |
| [--无声](myisamchk-general-options.html#option_myisamchk_silent) | 静音模式 |
| --种类\_缓冲\_尺寸 | 在执行 REPAIR 或使用 CREATE INDEX 或 ALTER TABLE 创建索引时对索引进行排序时分配的缓冲区 |
| [--排序索引](myisamchk-other-options.html#option_myisamchk_sort-index) | 按高低顺序对索引树块进行排序 |
| --种类\_钥匙\_块 | 种类\_钥匙\_块 |
| [--排序记录](myisamchk-other-options.html#option_myisamchk_sort-records) | 根据特定索引对记录进行排序 |
| [--排序恢复](myisamchk-repair-options.html#option_myisamchk_sort-recover) | 即使临时文件非常大，也强制 myisamchk 使用排序来解析键 |
| --统计\_方法 | 指定 MyISAM 索引统计信息收集代码应如何处理 NULL |
| [--tmpdir](myisamchk-repair-options.html#option_myisamchk_tmpdir) | 用于存储临时文件的目录 |
| [--解包](myisamchk-repair-options.html#option_myisamchk_unpack) | 打开一张装满 myisampack 的桌子 |
| [--更新状态](myisamchk-check-options.html#option_myisamchk_update-state) | 在 .MYI 文件中存储信息以指示何时检查表以及表是否崩溃 |
| [--详细](myisamchk-general-options.html#option_myisamchk_verbose) | 详细模式 |
| [--版本](myisamchk-general-options.html#option_myisamchk_version) | 显示版本信息并退出 |
| --写\_缓冲\_尺寸 | 写缓冲区大小 |
