Error number: MY-012949; Symbol: ER_IB_MSG_1124; SQLSTATE: HY000
Message: %s
Error number: MY-012949;
Symbol: ER_IB_MSG_1124;
SQLSTATE: HY000
错误说明
ER_IB_MSG_1124 错误号,是MySQL官方定义的一个错误,表明在InnoDB存储引擎使用过程中出现了无效的行记录锁定(Record lock)出错信息。它也是由于连接和/或查询处理中的某种偏差,造成的InnoDB访问出现的问题,主要表现在InnoDB发生了记录锁定错误,这时再连接到MySQL Server会提示这个错误信息。
常见案例
ER_IB_MSG_1124 错误一般是因为使用了多个连接连接到MySQL Server,而在一个连接中使用了脏读(dirty read),导致另一个连接发出行锁定失效导致的错误。ER_IB_MSG_1124 错误不是因为MySQL 真正存储引擎或者文件中出现损坏或者其他问题,而是由于使用多连接操作时上述原因导致的情况。
解决方法
ER_IB_MSG_1124 错误问题的解决方法非常具体,可以从不同的层面入手。首先要定位原有问题的源头,检查自己的SQL语句,查看每条SQL语句的执行过程,然后确定错误的调用情况,最后检查是否有多个连接,产生了竞争锁现象。
如果出错的是一个连接的话,建议检查是否有被脏读(dirty read),如果有,建议改为可重复读(RR);最好关闭这个连接;然后检查可能存在的死锁,一旦检测出它存在一个死锁,使用Rollback语句立即释放掉死锁。
此外,还可以考虑增加事务控制,例如在单个 mysql 连接中执行事务操作,而不是在多个连接上执行,以此来避免 ER_IB_MSG_1124 的发生。