以下选项可用于 mysqld 更改 MyISAM
表的行为。有关更多信息,请参见 第 7.1.7 节“服务器命令选项”。
表 18.3 MyISAM 选项和变量参考
名称 | 命令行 | 选项文件 | 系统变量 | 状态变量 | 变量范围 | 动态 |
---|---|---|---|---|---|---|
bulk_insert_buffer_size | 是 | 是 | 是 | 两者 | 是 | |
concurrent_insert | 是 | 是 | 是 | 全局 | 是 | |
delay_key_write | 是 | 是 | 是 | 全局 | 是 | |
have_rtree_keys | 是 | 全局 | 否 | |||
key_buffer_size | 是 | 是 | 是 | 全局 | 是 | |
log-isam | 是 | 是 | ||||
myisam-block-size | 是 | 是 | ||||
myisam_data_pointer_size | 是 | 是 | 是 | 全局 | 是 | |
myisam_max_sort_file_size | 是 | 是 | 是 | 全局 | 是 | |
myisam_mmap_size | 是 | 是 | 是 | 全局 | 否 | |
myisam_recover_options | 是 | 是 | 是 | 全局 | 否 | |
myisam_sort_buffer_size | 是 | 是 | 是 | 两者 | 是 | |
myisam_stats_method | 是 | 是 | 是 | 两者 | 是 | |
myisam_use_mmap | 是 | 是 | 是 | 全局 | 是 | |
tmp_table_size | 是 | 是 | 是 | 两者 | 是 |
以下系统变量会影响 MyISAM
表的行为。有关更多信息,请参见 第 7.1.8 节“服务器系统变量”。
批量插入优化中使用的树缓存的大小。
注意这是一个 每个线程 的限制!
不要在写入任何
MyISAM
表之间刷新键缓冲区。注意如果执行此操作,则在使用表时,不应从其他程序(例如,从另一个 MySQL 服务器或使用 myisamchk)访问
MyISAM
表。这样做有索引损坏的风险。使用--external-locking
并不能消除此风险。MySQL 在重新创建
MyISAM
索引(在REPAIR TABLE
、ALTER TABLE
或LOAD DATA
期间)时允许使用的临时文件的最大大小。如果文件大小大于此值,则索引将使用键缓存创建,这将更慢。该值为字节。设置自动恢复崩溃的
MyISAM
表的模式。设置恢复表时使用的缓冲区大小。
如果您使用 myisam_recover_options
系统变量设置启动 mysqld,则会激活自动恢复。在这种情况下,当服务器打开 MyISAM
表时,它会检查表是否标记为已崩溃,或者表的打开计数变量是否不为 0 且您正在运行禁用外部锁定的服务器。如果这两个条件中的任何一个为真,则会发生以下情况
服务器检查表是否存在错误。
如果服务器发现错误,它会尝试进行快速表修复(排序且不重新创建数据文件)。
如果修复失败,原因是数据文件中的错误(例如,重复键错误),则服务器会再次尝试,这次会重新创建数据文件。
如果修复仍然失败,则服务器会使用旧的修复选项方法(逐行写入,不排序)再尝试一次。此方法应该能够修复任何类型的错误,并且对磁盘空间的要求较低。
如果恢复无法从先前已完成的语句中恢复所有行,并且您没有在 myisam_recover_options
系统变量的值中指定 FORCE
,则自动修复将中止并会在错误日志中显示一条错误消息
Error: Couldn't repair table: test.g00pages
如果您指定 FORCE
,则会写入类似以下内容的警告
Warning: Found 344 of 354 rows when repairing ./test/g00pages
如果自动恢复值包含 BACKUP
,则恢复过程会创建名称格式为
的文件。您应该有一个 cron 脚本,自动将这些文件从数据库目录移动到备份介质。tbl_name-datetime
.BAK