解决mysql死锁问题 SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
钉钉机器人报警了
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
在PHP调试时 提交事务触发异常后没有执行回滚导致mysql死锁,以致后续请求更新不了数据
问题原因
在mysql中事务a执行修改数据,比如: update table set a=1 where id=1;此时事务并未进行提交也没有回滚,然后事务B开始运行,修改同一条数据: update table set a=2 where id=1;
问题出现环境
1、在同一事务内先后对同一条数据进行插入和更新操作;
2、多台服务器操作同一数据库;
3、瞬时出现高并发现象;
4、语句中没有执行commit,也没有rollback就return退出了
比如参数检查不通过,直接return错误信息,导致回滚不能执行
如以下代码先执行了更新操作,后面出错又直接返回,导致没有执行rollback,对于这种操作return前一点要回滚,或者抛出异常统一扑捉后返回错误信息
$this->startTrans();
try {
$user = new User();
$user->where('id',$userId)->update(['realname'=>$parentName]);
$existId = $this->where('class_id',$classId)->where('student_number',$number)->find();
if ($existId) {
return ['data' => '', 'code' => 300, 'msg' => '学号重复'];
}
$this->commit();
} catch (Throwable $e) {
$this->rollback();
return ['data' => '', 'code' => 20102, 'msg' => $e->getMessage()];
}
更多:https://blog.51cto.com/u_12390904/6254246
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2017-12-04 Docker 从入门到放弃(一)安装