node 操作 MySQL 出现 ER_LOCK_WAIT_TIMEOUT 问题

2017-06-13 11:26:55 +08:00
 imherer

操作 MySQL 用的 node-mysql

今早起来收到报告说用户无法登陆。我上服务器看了下进程是正常的,于是访问了下首页发现也没问题(首页就是一个静态页面,和数据库没交互) 于是我就尝试登陆下,发现确实无法登陆,点了登陆按钮后一直 loading,最后 timeout。

查了下日志,发现连续报了 2 同样的错:Error: ER_LOCK_WAIT_TIMEOUT: Lock wait timeout exceeded; try restarting transaction

这个错之后紧接着有 3 个连续的:Error: Handshake inactivity timeout

根据记录查询了下发现自从报了这错之后就再也没用户登陆了(应该就是这个错导致的了)

然后我接着连上数据库 SHOW PROCESSLIST,发现进程都正常

不知道从何下手,然后我重启了一下 node 进程就正常了

为什么出了死锁后会导致所有操作数据库的进程一直卡住啊?

这个业务线上跑了很久,第一次遇到这个问题。

3470 次点击
所在节点    Node.js
2 条回复
my101du
2017-06-13 11:37:43 +08:00
是用的这个吗?
https://github.com/mysqljs/mysql

如果排除确实是一些写数据库的 SQL 语句有问题导致锁表,可以试试我之前遇到过的不完美处理

按它的官方文档,一开始就 connection.connect(),然后用完调用 connection.end(); 发现报错,连不上数据库。
注释掉这两处就可以了。
imherer
2017-06-13 11:41:14 +08:00
@my101du 谢谢你的回答。
用的就是这个,应该不是你这个原因。connection.end();是释放连接吧,和我的问题应该没关系。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX