Error number: MY-012561; Symbol: ER_IB_MSG_736; SQLSTATE: HY000
Message: Can’t initiate database recovery, running in read-only-mode.
MySQL 错误 ER_IB_MSG_736 是由 MySQL 服务器的 InnoDB 存储引擎抛出的一个警告。该错误消息的完整文本为[Error number: ER_IB_MSG_736; Symbol: ER_IB_MSG_736; SQLSTATE:HY000]: “Table '{table}’ has clustered index outside of the bounds of the table.”
这个错误发生流程如下:当在 MySQL 服务器上查询特定的表时,InnoDB 将查阅表的定义。如果发现将表的聚集索引(clustered index)设定在表外部,那么就会抛出这个警告ER_IB_MSG_736。这个警告意味着,InnoDB 运行时会忽略聚集索引,而将表直接用基表定义来运行。
这个错误消息常见于 MySQL 表具有特定聚集索引,即使该索引处于表之外也不会干扰 InnoDB 中的任何操作。然而,以上情况下,MySQL 服务器会抛出 ER_IB_MSG_736 错误,因为该表在表外部定义聚集索引,MySQL 服务器无法正确的使用该表的定义。
这个 ER_IB_MSG_736 错误的解决方法是,客户端必须将表的聚集索引调整至表定义的边界内。为此,可以使用“ALTER TABLE”语句将该表内各列重新定义一次,定义中应该包括聚集索引,使其位于表定义的边界内。创建聚集索引的语法如下所示:
ALTER TABLE table_name
DROP INDEX index_name;
ALTER TABLE table_name
ADD CLUSTERED INDEX index_name
ON (column_name, column_name);
上面的实例中,将抛出删除名为“index_name”的索引,并创建以两个列(column_name)为基础的新聚集索引。
在完成上述步骤后,ER_IB_MSG_736 错误将被修复,MySQL 服务器应能正常操作该表。