讲师中心 微信公众号
AI工具推荐 视频效率加速

mysql处理死锁时的错误处理代码示例_增加重试循环逻辑

梦芳姑娘_8821

梦芳姑娘_8821

发布时间:2026-03-24 12:09:31

|

838人浏览过

|

来源于php中文网

原创

MySQL死锁错误码为1213,需在代码中精准捕获该码而非泛捕异常;重试须带指数退避、限定次数、包裹完整事务,并确保加锁顺序一致,同时连接池配置需匹配重试并发需求。

mysql处理死锁时的错误处理代码示例_增加重试循环逻辑

捕获 MySQL 死锁错误码 1213

MySQL 遇到死锁时不会静默失败,而是明确抛出 ERROR 1213 (40001): Deadlock found when trying to get lock。关键不是“有没有报错”,而是你的代码是否在 try 块里真正捕获了这个特定错误码——很多框架(比如 Django 的 DatabaseError 或 SQLAlchemy 的 DBAPIError)会包装它,直接抓 Exception 可能漏掉重试机会。

  • Python + PyMySQL/MySQLdb:检查 exc.args[0] 是否等于 1213,而不是只看异常类型
  • Node.js + mysql2:监听 err.code === 'ER_LOCK_DEADLOCK',不是 err.sqlState 或模糊的 'HY000'
  • Java + JDBC:用 SQLException.getSQLState().equals("40001"),getErrorCode() 在某些驱动下不可靠

重试逻辑必须带退避,不能裸 while true

死锁重试不是“再跑一遍”就行。连续无延迟重试大概率再次撞上相同资源竞争路径,反而加剧锁等待和超时风险。MySQL 自身不提供“自动重试”,全靠应用层控制节奏。

  • 初始延迟建议从 10 毫秒起步,每次乘以 1.5~2(如 10, 20, 40, 80...),避免雪崩式重试
  • 硬性设置最大重试次数(通常 3~5 次足够),超过则让上层决定是降级、告警还是抛出原始错误
  • 不要在事务外层包重试——必须把整个事务逻辑(BEGIN 到 COMMIT)包进重试块,否则可能重复执行部分语句

事务内操作顺序要稳定,否则重试反而放大死锁概率

重试能起作用的前提,是每次执行时对行加锁的顺序一致。如果业务逻辑里有 SELECT ... FOR UPDATE 加锁,而 WHERE 条件依赖非唯一字段或未排序结果,两次执行锁的行顺序可能不同,导致“重试=换一种死锁方式”。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 所有涉及写锁的 SELECT ... FOR UPDATE 必须带 ORDER BY 主键,强制加锁顺序
  • 批量更新多行时,先用 SELECT id FROM ... ORDER BY id 拿到有序 ID 列表,再按序 UPDATE ... WHERE id IN (...)
  • 避免在事务中调用外部服务或用户输入,防止执行时间抖动影响锁持有时间窗口

连接池配置要配合重试,否则容易耗尽连接

重试本身不增加数据库压力,但若连接池没调好,多个并发请求反复重试,会快速占满连接数,引发 Too many connections 或连接超时,掩盖真实死锁问题。

  • 确保连接池最大连接数 ≥ 单次重试最大并发数 × 重试次数上限(例如:20 并发 × 3 次重试 → 至少预留 60 连接)
  • 设置合理的连接空闲超时(如 wait_timeout 和池的 idleTimeoutMillis),避免重试间隙里大量连接挂起不释放
  • 重试时若遇到连接异常(如 ConnectionResetError),应主动关闭当前连接并获取新连接,别试图复用已断开的句柄

死锁重试最常被忽略的点:不是“有没有重试”,而是重试时事务是否还处于同一连接上下文、锁顺序是否真的一致、连接池是否默默成了瓶颈。这三个地方任一出问题,加了重试反而更难定位。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2173

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1339

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

775

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2972

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

4988

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1119

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5251

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4622

2023.08.14

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

40

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 183人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn