V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imherer
V2EX  ›  Node.js

node 操作 MySQL 出现 ER_LOCK_WAIT_TIMEOUT 问题

  •  
  •   imherer · 2017-06-13 11:26:55 +08:00 · 3463 次点击
    这是一个创建于 2499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    操作 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 进程就正常了

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

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

    2 条回复    2017-06-13 11:41:14 +08:00
    my101du
        1
    my101du  
       2017-06-13 11:37:43 +08:00
    是用的这个吗?
    https://github.com/mysqljs/mysql

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

    按它的官方文档,一开始就 connection.connect(),然后用完调用 connection.end(); 发现报错,连不上数据库。
    注释掉这两处就可以了。
    imherer
        2
    imherer  
    OP
       2017-06-13 11:41:14 +08:00
    @my101du 谢谢你的回答。
    用的就是这个,应该不是你这个原因。connection.end();是释放连接吧,和我的问题应该没关系。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1329 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:35 · PVG 01:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.