今天用django写一个小程序,结果调用数据库的时候在执行update命令时,一直出现“ Lock wait timeout exceeded; try restarting transaction”错误。
网上百度了下,说是可以通过改mysql的配置文件/ect/my.cnf中的innodb_lock_wait_timeout变量,将它的值提高到500,即innodb_lock_wait_timeout=500.但我改了之后,没有解决。
又百度之,也没找到能够解决的方法。当然,这很可能是因为我没搜到好帖子,总之。。。我纠结了几个小时这个问题,不小心机器重启了。。之后。。我再次执行,居然可以。。。
首先声明我是数据库小白,只会常用命令操作,对数据库只懂使用,而且使用的很浅,对数据库的理解更是不深刻,所以我可能说不到点儿上,无法针对你的环境解决这个问题。那就在百度谷歌下,肯定可以的。加油,不过还是要恭喜你,得到了博主我在远方深情且饱含热泪的祝福。不要给我差评,不要骂我,乖,因为我不会开评论的
开始说正题:
我当时出问题的环境:centos,打开了一个mysql命令行、一个使用数据库的程序在运行(其实就是我在对数据库操作的project)、一个python shell(在python里面我也在使用数据库)。
现在看这三个环境,你一定以为我疯了,是的,没错!你没错!!!我现在也这么感觉的。当时的我肯定是被驴蹬了,弱爆了
其实,当时,我自作聪明地想的是:在python shell里面试一下我写的程序,在mysql命令行试一下我的mysql语句,再把都通过的程序写到我的project中,这样程序就没错了呀。。尼玛,多么严谨的写代码步骤啊!结果就这样给自己挖了一个硕大的坑,在坑里扑腾了半天。
以上除了粉红底色的都可以不看,博主只是无法控制要疯的节奏,在吐槽自己的智商。。下面开始说为什么会出现这个该死的错误。
没错,你真的没有看错!那就是:只留一个可以对数据库有操作的shell或程序或。。其他的都关掉、关掉!
如果还是不可以,那我建议你,保存你的程序,重启下。
如果真的你这么做了之后,解决了问题,那你一定会怀着对博主感谢的态度,继续看为什么会这样,这尼玛到底是为什么!
其实,是mysql为了对数据库的插入(insert)、更新(update)、删除(delete)等更改数据库内容命令进行的自我保护,同一时刻只允许一个窗口对数据库进行以上更改操作。
官方点儿:就是所谓的数据库死锁。
具体,想了解数据库死锁、想更加深入对这个问题究其根本的。博主我只能为你这种探索精神点个赞,那你就继续百度谷歌啦~小白博主我只能送你到这儿了,我们白了白。
如果你想无私的跟我分享,可以私信我,因为我关了评论喔~如果你想骂我这狗屁方法不管用,那还是不要了吧
精分的(其实是被这个问题逼疯的)博主,求大家放过。