我在使用大型 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。如果你没有,请阅读此网址