处理 mysql error 1205

本文描述了一次在公司修复bug过程中遇到的MySQL存储失败的问题,详细记录了如何诊断并最终解决由未提交的事务导致的死锁问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天在公司修复一个小bug,一个数据在修改后没有实时的存储起来,直接改代码,修改后通过mysql语句存储起来,但是测试的时候,mysql老是存储不成功,明明看到sql语句已经执行但是通过Navicat连到数据库去看,数据还是没有更新。然后通过看代码,原来mysql查询没成功,返回1205错误,网上一查 Lock wait timeout exceeded; try restarting transaction大概原因是死锁了 ,上一个事务一直没有提交,导致一直在那等待。

  先看下mysql线程 show processlist,由于是开发测试机,连接太多了,根本不好看到我的连接。直接使用mysql语句查看

select id,user,host,db,Command,State,time from information_schema.processlist where db='我的数据库';

     QQ图片20171212163045.png

  没有看到正在执行的慢查询,网上搜索说可以查information_schema.innodb_lock_waits这张表,可以直接看到死锁的状态,但是,貌似mysql5.5以上才有,我们用的5.1,悲剧。

  后来发现凡是涉及到那张表的操作全返回1205,那肯定是死锁了。仔细看上面的连接线程,有两个host不一样,且其一直是sleep状态,很有可能就是开始事务后,没有提交,一直sleep了。而且那两个连接就是Navicat通过我本机连到的数据库,有可能我在Navicat中有些误操作,然后又不管了强制关闭了。可以试试直接kill这些线程。

直接kill 上面的线程 ,mysql语句执行成功了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值