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错误。


数据运维技术 » MySQL Error number: MY-012923; Symbol: ER_IB_MSG_1098; SQLSTATE: HY000 报错 故障修复 远程处理