CHECK TABLE在MySQL上locking一个大的(12GB)InnoDB表

我有一个大的MySQL InnoDB表的问题,我想知道如果有人在这里有提高稳定性的build议。

我遇到的问题是, CHECK TABLE ... FAST会locking表格,阻止任何读取,而对于这个大的表格,这意味着它离线一个小时。

每当MySQL启动时,默认的Debian安装都会对所有的东西运行CHECK TABLE ,这会导致停机。 现在,我已经禁用了这个function,但是让我有点紧张,对这些系统设置感到厌倦。

我有另一个cronjob批量加载数据到正在使用ALTER TABLE ... DISABLE KEYSALTER TABLE ... ENABLE KEYS ,这可能是相关的,但我还没有能够确认。

有没有人看过CHECK TABLE阻止访问大型InnoDB表的情况?

我在ServerFault中写了一段时间 ,表明你不能在InnoDB表上禁用KEYS和ENABLE KEYS。

CHECK TABLE应该总是表锁MyISAM或InnoDB的任何表。

您可以使用以下命令创build一个名为/var/lib/mysql/my_init.sql的脚本

CHECK TABLE <whatever table 1>;
CHECK TABLE <无论表2>;

这个文件应该包含你想要CHECK TABLE的表的数量。

现在将这一行添加到/etc/my.cnf

init_file =的/ var / lib中/ MySQL的/ my_init.sql

然后重新启动mysql,自定义检查表脚本将运行。

顺便说一句,我希望你正在使用innodb_file_per_table。 如果你不是, 请阅读这个url