15.2.1 MyISAM 启动选项

mysqld的以下选项可用于更改MyISAMtable 的行为。有关更多信息,请参见第 5.1.6 节“服务器命令选项”

table15.3 MyISAM 选项和变量参考

NameCmd-LineOption FileSystem VarStatus VarVar ScopeDynamic
bulk_insert_buffer_sizeYesYesYesBothYes
concurrent_insertYesYesYesGlobalYes
delay_key_writeYesYesYesGlobalYes
have_rtree_keysYesGlobalNo
key_buffer_sizeYesYesYesGlobalYes
log-isamYesYes
myisam-block-sizeYesYes
myisam_data_pointer_sizeYesYesYesGlobalYes
myisam_max_sort_file_sizeYesYesYesGlobalYes
myisam_mmap_sizeYesYesYesGlobalNo
myisam_recover_optionsYesYesYesGlobalNo
myisam_repair_threadsYesYesYesBothYes
myisam_sort_buffer_sizeYesYesYesBothYes
myisam_stats_methodYesYesYesBothYes
myisam_use_mmapYesYesYesGlobalYes
tmp_table_sizeYesYesYesBothYes

以下系统变量会影响MyISAMtable 的行为。有关更多信息,请参见第 5.1.7 节“服务器系统变量”

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

Note

这是每个线程的限制!

不要在任何MyISAMtable 的写入之间刷新键缓冲区。

Note

如果这样做,则在使用 table 时,不应从另一个程序(例如从另一个 MySQL 服务器或使用myisamchk)访问MyISAMtable。这样做可能会导致索引损坏。使用--external-locking不能消除这种风险。

在重新创建MyISAM索引时(在REPAIR TABLEALTER TABLELOAD DATA期间),允许 MySQL 使用的临时文件的最大大小。如果文件大小大于此值,那么将使用键高速缓存来创建索引,这会比较慢。该值以字节为单位。

设置自动恢复崩溃的MyISAMtable 的模式。

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

如果您以myisam_recover_options系统变量集启动mysqld,则会激活自动恢复。在这种情况下,当服务器打开MyISAMtable 时,它将检查该 table 是否标记为已崩溃或该 table 的打开计数变量是否不为 0,并且正在禁用外部锁定的情况下运行服务器。如果这些条件之一成立,则会发生以下情况:

  • 服务器检查 table 中是否有错误。

  • 如果服务器发现错误,它将尝试进行快速 table 修复(使用排序并且不重新创建数据文件)。

  • 如果由于数据文件中的错误(例如,重复密钥错误)而导致修复失败,则服务器将再次尝试,这一次将重新创建数据文件。

  • 如果修复仍然失败,则服务器将使用旧的修复选项方法再次尝试(逐行写入而不进行排序)。此方法应该能够修复任何类型的错误,并且磁盘空间要求低。

如果恢复无法从先前完成的语句中恢复所有行,并且您未在myisam_recover_options系统变量的值中指定FORCE,则自动修复将中止并在错误日志中显示一条错误消息:

Error: Couldn't repair table: test.g00pages

如果您指定FORCE,则会写出这样的警告:

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

如果自动恢复值包括BACKUP,则恢复过程将创建名称格式为tbl_name-datetime.BAK的文件。您应该具有一个 cron 脚本,该脚本会自动将这些文件从数据库目录移动到备份介质。