MySQL Error number: MY-012923; Symbol: ER_IB_MSG_1098; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-012923; Symbol: ER_IB_MSG_1098; SQLSTATE: HY000
Message: Creating shared tablespace for temporary tables
错误说明
ER_IB_MSG_1098(MySQL错误号为MY-012923)的官方解释为,“索引的类型与表的引擎不一致”。这是一个InnoDB索引类型错误,在InnoDB表上创建了实际上是基于MyISAM引擎的索引会出现此错误。ER_IB_MSG_1098是由MySQL服务器抛出的一条出错消息,提醒用户表中索引的类型与表的存储引擎类型不一致。
常见案例
比如,使用MySQL的DELIMITER语句,尝试在InnoDB表上创建一个索引,但未将 engine=MyISAM指定为MyISAM引擎。例子语句如下:
CREATE INDEX IndexName ON TableName (IndexedColumn);
ER_IB_MSG_1098错误也可能出现在InnoDB引擎上尝试创建MyISAM引擎索引的情况下,例如:
CREATE INDEX IndexName ON TableName (IndexedColumn) USING MyISAM;
此外,如果表上有另一个基于MyISAM引擎的索引,则再尝试使用MyISAM创建索引时,也会出现此错误。
解决方法
对于类型错误ER_IB_MSG_1098,原因很简单-在创建InnoDB表时使用的是MyISAM索引的指令。所以,MySQL给出的解决建议是,在更改表引擎类型之前,只要将索引更改为InnoDB就可以解决ER_IB_MSG_1098错误。
一般处理方法及步骤
1.从现有索引中导出定义文件:
运行以下命令以导出源表中使用MyISAM引擎的索引定义:
mysqldump –extended-insert=FALSE –no-data –skip-opt TableName > TableName_Index.sql
2.从文件中删除MyISAM索引行
从上一步中导出的语句文件中删除“USING MyISAM”行。
3.重新编译新的InnoDB索引定义
替换由MyISAM引擎的索引的定义,用InnoDB重新编辑语句文件中的相关行,以便改变索引的定义,并删除USING MyISAM。
4.导入InnoDB索引定义
导入更新的SQL文件,例如:
mysql
执行上述sql后,将重新更新MyISAM索引,使它们以InnoDB索引形式出现,从而重新解决ER_IB_MSG_1098错误。