检查表在 MySQL 上锁定大型(12GB)InnoDB 表

检查表在 MySQL 上锁定大型(12GB)InnoDB 表

我在使用大型 MySQL InnoDB 表时遇到了问题,我想知道这里是否有人能提供一些关于提高稳定性的建议。

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

每当 MySQL 启动时,默认的 Debian 安装都会CHECK TABLE在所有系统上运行,这会导致停机。目前,我已禁用此功能,但这让我对处理此类系统设置感到有点紧张。

我有另一个 cronjob 正在将数据批量加载到使用ALTER TABLE ... DISABLE KEYS和的表中ALTER TABLE ... ENABLE KEYS,这可能相关,但我还无法确认这一点。

有谁见过CHECK TABLE阻止访问大型 InnoDB 表的情况吗?

答案1

我之前在 ServerFault 中写过表明您不能在 InnoDB 表上 DISABLE KEYS 和 ENABLE KEYS。

CHECK TABLE 应该始终对任何 MyISAM 或 InnoDB 表进行表锁。

您可以创建一个名为 /var/lib/mysql/my_init.sql 的脚本,内容如下

检查表 < 无论表 1 >;
检查表 < 无论表 2 >;
...

此文件应该包含您想要检查表的任意数量的表。

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

init_file=/var/lib/mysql/my_init.sql

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

顺便说一句,我希望你正在使用 innodb_file_per_table。如果你没有,请阅读此网址

相关内容