7.6.5 设置 MyISAMtable 维护计划

定期执行 table 检查而不是 await 问题发生是一个好主意。检查和修复MyISAMtable 的一种方法是使用CHECK TABLEREPAIR TABLE语句。参见第 13.7.2 节“table 维护声明”

检查 table 的另一种方法是使用myisamchk。为了维护目的,您可以使用myisamchk -s-s选项(--silent的缩写)使myisamchk在静默模式下运行,仅在发生错误时打印消息。

启用自动MyISAMtable 检查也是一个好主意。例如,每当计算机在更新过程中完成重新启动时,通常需要检查每个可能已经受影响的 table,然后再使用该 table。 (这些是“预期的崩溃 table.”)要使服务器自动检查MyISAMtable,请使用myisam_recover_options系统变量集启动它。参见第 5.1.7 节“服务器系统变量”

您还应该在正常系统运行期间定期检查 table。例如,您可以每周一次运行 cron 作业以检查重要 table,并在crontab文件中使用以下行:

35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI

这将打印出有关崩溃 table 的信息,以便您可以根据需要检查和修复它们。

首先,每晚对最近 24 小时内已更新的所有 table 执行myisamchk -s。如您所见,问题很少发生,您可以将检查频率推迟到大约每周一次。

通常,MySQLtable 几乎不需要维护。如果要对具有动态大小的行的MyISAMtable(具有VARCHARBLOBTEXT列的 table)执行许多更新,或者具有删除了许多行的 table,则可能需要不时对 table 进行碎片整理/回收。您可以通过在相关 table 上使用OPTIMIZE TABLE来完成此操作。或者,如果可以暂时停止mysqld服务器,则将位置更改为数据目录,然后在服务器停止时使用此命令:

shell> myisamchk -r -s --sort-index --myisam_sort_buffer_size=16M */*.MYI