如何配置MySQL解决Too many keys specified max 64 keys报错
问题根因
你之前的操作方向完全错误:./configure 是从源码编译安装MySQL时,在操作系统命令行执行的编译配置指令,既不是可以在Workbench里跑的SQL语句,也不是能写进my.cnf/my.ini配置文件的运行参数。你把这段编译指令塞到建库脚本、配置文件里,MySQL根本识别不了,自然不会有任何效果。
额外说明:MySQL 8.0官方发布的预编译安装包(含Windows安装版、Linux官方源安装版),默认单表最大索引上限已经设为1024,你现在触发64个索引的报错,只有两种可能:要么你安装的是第三方修改的极度精简版MySQL,要么你用的Oracle转MySQL迁移工具生成表结构时,重复创建了大量冗余索引——正常业务表几乎不可能需要超过64个索引。
解决步骤(按优先级从高到低选)
方案1:清理冗余索引(新手首选,无需改动MySQL安装)
90%以上的这类报错都是迁移工具生成表结构出错导致的,按以下流程处理:
- 找到触发报错的表,把迁移工具生成的对应建表SQL单独导出
- 统计建表语句里的所有索引数量:主键、唯一键、普通索引、外键自动生成的隐式索引都要算入总数
- 排查重复冗余的索引:比如给同一个字段重复建多个单值索引、联合索引里已经包含前缀字段却额外给前缀字段建重复索引的情况,删掉这些冗余项,把单表总索引数降到64以内,再重新执行迁移即可,不需要改任何MySQL底层配置。
方案2:更换官方版MySQL(确认表确实需要超过64个索引时使用)
如果你排查完确认单表索引数确实需要超过64,不要往配置文件里塞编译参数,按以下流程操作:
- 先备份当前MySQL实例里的所有数据,卸载现有非官方版本的MySQL
- 下载MySQL官方发布的8.0正式版安装包,按默认流程完成安装
- 安装完成后打开Workbench连接实例,执行以下SQL确认参数生效:
SHOW VARIABLES LIKE 'max_max_indexes';
返回的参数值默认是1024,完全可以满足超64索引的使用需求,之后再执行迁移操作即可。
你之前操作的明确错误点
- 编译指令
./configure只能在你下载MySQL源码包、手动编译安装的阶段,在操作系统的终端(比如Linux的shell、Windows的命令提示符)里执行,不能在Workbench的SQL编辑区运行,也不能写到建schema的脚本里 - 编译参数是在生成MySQL安装程序阶段就固定死的参数,MySQL安装完成后,无法通过修改配置文件的方式调整这类参数,你把编译指令写进my.cnf的操作,只会被MySQL当成无效配置直接忽略,不会产生任何效果
内容的提问来源于stack exchange,提问作者DarkBlade
相关产品推荐
相关产品推荐

