Documentation Home

14.21.4 InnoDB 错误处理

以下项目描述了如何InnoDB 执行错误处理。InnoDB有时只回滚失败的语句,有时回滚整个事务。

  • 如果表空间中的文件空间 不足,则会发生MySQL Table is full错误并 InnoDB回滚 SQL 语句。

  • 事务死锁 导致回滚整个 事务InnoDB_ 发生这种情况时重试整个事务。

    锁等待超时导致InnoDB回滚当前语句(等待锁并遇到超时的语句)。要使整个事务回滚,请在 --innodb-rollback-on-timeout 启用的情况下启动服务器。--innodb-rollback-on-timeout如果使用默认行为,则重试语句;如果启用 ,则重试整个事务 。

    死锁和锁等待超时在繁忙的服务器上都是正常的,应用程序有必要意识到它们可能发生并通过重试来处理它们。您可以通过在事务期间对数据的第一次更改和提交之间做尽可能少的工作来降低它们的可能性,因此锁定的时间尽可能短,行数也尽可能少。有时在不同事务之间拆分工作可能是实用且有帮助的。

  • IGNORE如果您未在语句中指定该选项 ,则重复键错误会回滚 SQL语句。

  • Arow too long error回滚 SQL 语句。

  • 其他错误大多由MySQL代码层(InnoDB存储引擎层以上)检测到,并回滚相应的SQL语句。单个 SQL 语句的回滚不会释放锁。

在隐式回滚期间,以及在执行显式 ROLLBACKSQL 语句期间,SHOW PROCESSLIST 显示Rolling backState相关连接的列中。