下列对MySQLd 的选项可用来改变MyISAM表的行为:
·--myisam-recover=mode
设置为崩溃MyISAM表自动恢复的模式。
·--delay-key-write=ALL
对任何MyISAM表的写操作之间不要刷新键缓冲区。
注释:如果你要这么做。当表在使用中之时,你应该不使用来自另一个程序的MyISAM表(比如从另一个MySQL服务器或用myisamchk)。这么做会导致索引被破坏。
对使用--delay-key-write的表,使用--external-locking没有帮助。
列系统变量影响MyISAM表的行为:
·bulk_insert_buffer_size
用在块插入优化中的树缓冲区的大小。注释:这是一个per thread的限制。
·(OBSOLETE) myisam_max_extra_sort_file_size
这个参数已经不在MySQL中使用。
·myisam_max_sort_file_size
如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出。
·myisam_sort_buffer_size
设置恢复表之时使用的缓冲区的尺寸。
如果用--myisam-recover选项启动mysqld,自动恢复被激活。在这种情况下,当服务器打开一个MyISAM表之时,服务器会检查是否表被标注为崩溃,或者表的打开计数变量是否不为0且你正用--skip-external-locking运行服务器。如果这些条件的任何一个为真,下列情况发生:
·表被查错。
·如果服务器发现一个错误,它试着做快速表修复(排序且不重新创建数据文件)。
·如果修复因为数据文件中的一个错误而失败(例如,一个重复键错误),服务器会再次尝试修复,这一次重建数据文件。
· 如果修复仍然失败,服务器用旧修复选项方法再重试一次修复(一行接一行地写,不排序)。这个方法应该能修复任何类型的错误,并且需要很低的磁盘空间。
如果恢复不能够从先前完成的语句里恢复所有行,而且你不能在--myisam-recover选项值指定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脚本,它自动把这些文件从数据库目录移到备份媒质上。