首页/数据/数据库速查/应用侧锁错误处理(1213/1205 重试)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

应用侧锁错误处理(1213/1205 重试)

数据库锁错误要有明确应用策略:1213 死锁与 1205 超时均可安全重试(事务边界内重做),用有界退避+幂等保证正确性。

数据库速查数据更新于 2026-10-12

重试伪代码

重试伪代码
for attempt in 1..3:
  try:
    BEGIN; ...业务写入...; COMMIT
    break
  except Deadlock(1213) or LockTimeout(1205):
    ROLLBACK
    sleep(50ms * attempt + jitter)
  # 超过次数:告警并抛出,避免无限重试
可重试1213 死锁、1205 锁超时(同事务重做)
不可重试1062 唯一键冲突等业务语义错误
前提事务内操作幂等/可重放
重试次数与退避要写死上限:风暴中无界重试会放大负载。

易错点

  • 在非事务上下文重试单条 UPDATE:部分成功语义不清,必须整事务重做
  • 重试无上限:死锁风暴持续放大,数据库永远缓不过来

数据来源与参考

  • MySQL 8.0 Reference Manual: Deadlocks
  • MySQL 8.0 Reference Manual: Error 1213

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌