MySQL Error number: MY-013656; Symbol: ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-013656; Symbol: ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL; SQLSTATE: HY000
Message: Delaying truncate of undo tablespace %s due to a metadata lock.
错误说明:
ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL错误是MySQL中出现的ERROR 1047错误,是一个主动性的错误,用于说明MySQL服务器的SET命令被锁定而无法修改设置。这个错误代表MySQL服务器在一个表上有一个多元文件锁(MDL),这个锁阻止了TRUNCATE TABLE表中的数据被清零,使得无法执行SET操作。
常见案例
ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL错误通常出现在MySQL服务器上,当有多个会话使用同一个表时,试图在这个表上进行TRUNCATE TABLE操作。 更具体来说,错误出现时,其中一个会话试图使用Table lock模式开始一个TRUNCATE TABLE操作,但是另一个会话使用record lock(行锁)模式拥有表的不同的部分,而且MySQL不能释放这个会话的锁以进行数据清零。
解决方法:
要解决ER_IB_MSG_UNDO_TRUNCATE_DELAY_BY_MDL错误,需要确定锁住表的会话,然后释放它们的行锁以清理表上的所有锁。可以使用SHOW ENGINE INNODB STATUS语句来确定当前活动的所有会话锁定,以及其持有的模式。 另外,可以使用KILL指令中断拥有锁定表内容的会话,以释放锁定并使TRUNCATE TABLE可以继续执行。