### 16.2.1 MyISAM 启动选项

以下选项可[**mysqld**](mysqld.html)可以用来改变行为`MyISAM`表。有关其他信息，请参阅[第 5.1.7 节，“服务器命令选项”](server-options.html).

[](<>)

**表 16.3 MyISAM 选项和变量参考**

| 姓名 | 命令行 | 选项文件 | 系统变量 | 状态变量 | 变量范围 | 动态的 |
| --- | --- | ---- | ---- | ---- | ---- | --- |
| [块\_插入\_缓冲\_尺寸](server-system-variables.html#sysvar_bulk_insert_buffer_size) | 是的 | 是的 | 是的 |  | 两个都 | 是的 |
| [同时\_插入](server-system-variables.html#sysvar_concurrent_insert) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [延迟\_钥匙\_写](server-system-variables.html#sysvar_delay_key_write) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [有\_rtree\_钥匙](server-system-variables.html#sysvar_have_rtree_keys) |  |  | 是的 |  | 全球的 | 不 |
| [钥匙\_缓冲\_尺寸](server-system-variables.html#sysvar_key_buffer_size) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [日志-isam](server-options.html#option_mysqld_log-isam) | 是的 | 是的 |  |  |  |  |
| [myisam 块大小](server-options.html#option_mysqld_myisam-block-size) | 是的 | 是的 |  |  |  |  |
| [米萨姆\_数据\_指针\_尺寸](server-system-variables.html#sysvar_myisam_data_pointer_size) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [米萨姆\_最大限度\_种类\_文件\_尺寸](server-system-variables.html#sysvar_myisam_max_sort_file_size) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [米萨姆\_地图\_尺寸](server-system-variables.html#sysvar_myisam_mmap_size) | 是的 | 是的 | 是的 |  | 全球的 | 不 |
| [米萨姆\_恢复\_选项](server-system-variables.html#sysvar_myisam_recover_options) | 是的 | 是的 | 是的 |  | 全球的 | 不 |
| [米萨姆\_维修\_线程](server-system-variables.html#sysvar_myisam_repair_threads) | 是的 | 是的 | 是的 |  | 两个都 | 是的 |
| [米萨姆\_种类\_缓冲\_尺寸](server-system-variables.html#sysvar_myisam_sort_buffer_size) | 是的 | 是的 | 是的 |  | 两个都 | 是的 |
| [米萨姆\_统计数据\_方法](server-system-variables.html#sysvar_myisam_stats_method) | 是的 | 是的 | 是的 |  | 两个都 | 是的 |
| [米萨姆\_采用\_地图](server-system-variables.html#sysvar_myisam_use_mmap) | 是的 | 是的 | 是的 |  | 全球的 | 是的 |
| [时间\_桌子\_尺寸](server-system-variables.html#sysvar_tmp_table_size) | 是的 | 是的 | 是的 |  | 两个都 | 是的 |

以下系统变量会影响`MyISAM`表。有关其他信息，请参阅[第 5.1.8 节，“服务器系统变量”](server-system-variables.html).

-   [`bulk_insert_buffer_size`](server-system-variables.html#sysvar_bulk_insert_buffer_size)

    [](<>)[](<>)

    批量插入优化中使用的树缓存的大小。

    笔记

    这是一个限制*每个线程*！

-   [`delay_key_write=ALL`](server-system-variables.html#sysvar_delay_key_write)

    [](<>)[](<>)

    不要在任何写入之间刷新键缓冲区`MyISAM`桌子。

    笔记

    如果你这样做，你不应该访问`MyISAM`来自另一个程序的表（例如来自另一个 MySQL 服务器或使用[**迈萨姆奇克**](myisamchk.html)) 使用表时。这样做有索引损坏的风险。使用[`--外部锁定`](server-options.html#option_mysqld_external-locking)并不能消除这种风险。

-   [`myisam_max_sort_file_size`](server-system-variables.html#sysvar_myisam_max_sort_file_size)

    [](<>)[](<>)

    MySQL 在重新创建时允许使用的临时文件的最大大小`MyISAM`指数（期间[`维修台`](repair-table.html),[`更改表`](alter-table.html)， 要么[`加载数据`](load-data.html)）。如果文件大小大于此值，则使用键缓存创建索引，这会更慢。该值以字节为单位。

-   [`myisam_recover_options=*`模式`*`](server-system-variables.html#sysvar_myisam_recover_options)

    [](<>)[](<>)

    设置崩溃自动恢复模式`MyISAM`表。

-   [`myisam_sort_buffer_size`](server-system-variables.html#sysvar_myisam_sort_buffer_size)

     [](<>)[](<>)

    设置恢复表时使用的缓冲区大小。

    如果您启动自动恢复将被激活[**mysqld**](mysqld.html)与[`myisam_recover_options`](server-system-variables.html#sysvar_myisam_recover_options)系统变量集。在这种情况下，当服务器打开一个`MyISAM`表，它检查表是否被标记为崩溃或表的打开计数变量是否不为 0，并且您正在运行禁用外部锁定的服务器。如果其中任何一个条件为真，则会发生以下情况：

-   服务器检查表是否有错误。

-   如果服务器发现错误，它会尝试进行快速表修复（使用排序但不重新创建数据文件）。

-   如果由于数据文件中的错误（例如，重复密钥错误）而导致修复失败，则服务器会再次尝试，这次重新创建数据文件。

-   如果修复仍然失败，服务器会再次尝试使用旧的修复选项方法（逐行写入而不进行排序）。这种方法应该能够修复任何类型的错误并且对磁盘空间的要求很低。

    如果恢复无法从以前完成的语句中恢复所有行并且您没有指定`力量`在价值[`myisam_recover_options`](server-system-variables.html#sysvar_myisam_recover_options)系统变量，自动修复中止并在错误日志中显示错误消息：


```
Error: Couldn't repair table: test.g00pages
```

如果您指定`力量`，而是写了这样的警告：

```
Warning: Found 344 of 354 rows when repairing ./test/g00pages
```

如果自动恢复值包括`备份`, 恢复过程创建文件的形式为`*`tbl_name-日期时间`*.BAK`.你应该有一个**cron**自动将这些文件从数据库目录移动到备份媒体的脚本。
