Innodb 和 Mysql 索引不一致

客户反馈建立索引时报错,具体错误如下:

[ERROR] Table db/table contains 7 indexes inside InnoDB, which is different from the number of indexes 6 defined in the MySQL

查了下 mysql 官网的解释是说是索引没同步,导致 Innodb 和数据字典的内容不一致,这种情况建议关闭表后等待索引同步就好了 但是我们这边禁止了关闭表的命令。

这个是MySQL常见问题。应该是用户执行建索引ddl的时候,退出了或者出现异常导致的。

如果 flush table 搞不定,需要alter table的话,让用户来执行

ALTER TABLE table_name ENGINE=Innodb;

但是执行 DDL 语句是有代价的,需要考虑客户是否一直用这个表,能重启最好,但是如果是 cache 的问题,那么直接 重启就好,如果是文件不一致还是需要执行 ALTER TABLE table_name ENGINE=Innodb;

参考:https://www.percona.com/blog/2011/11/29/innodb-vs-mysql-index-counts/