Error number: MY-011051; Symbol: ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL; SQLSTATE: HY000
Message: Table %s contains fewer indexes inside InnoDB than are defined in the MySQL. Have you mixed up with data dictionary from different installation?
错误说明:
MY-011051(ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL)是MySQL中一个常见的MySQL错误,它指出InnoDB索引的个数少于在MySQL中定义的数量。此错误可能由某些建立索引操作所致,如果不慎在同一个表中指定多个相同的索引,或者一次性删除多个索引时所触发。
常见案例:
在下面的示例中,表example中有3个索引,其中有两个完全相同的索引:
CREATE TABLE example(
id INT PRIMARY KEY,
name VARCHAR (50),
email VARCHAR (50),
INDEX namemail (name,email),
INDEX namemail (name,email));
这样会触发MY-011051(ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL)错误,因为定义了4个索引,但实际上只创建了3个索引。
解决方法:
要解决MY-011051(ER_INNODB_IDX_CNT_FEWER_THAN_DEFINED_IN_MYSQL)错误,首先要找出索引的问题,这通常是在MySQL中指定的多余的索引,例如重复索引,在这种情况下,要删除多余的索引,重新编辑和执行表架构以修复此错误。您也可以尝试禁用InnoDB索引,运行opcheckpoint命令并尝试重新启动服务器。如果以上步骤都不起作用,则可以尝试在恢复前运行一个检查点,以便以更可靠的方式根据恢复源初始化系统:
执行set global innodb_force_recovery=3;
在恢复时创建一个检查点;
输入set global innodb_force_recovery=0;
输入flush tables;
重新启动MySQL服务器;
重新构建表结构,以使InnoDB索引的个数与MySQL中定义的一致。