imherer
V2EX  ›  Node.js

node 操作 MySQL 出现 ER_LOCK_WAIT_TIMEOUT 问题

  •  
  •   imherer · Jun 13, 2017 · 4024 views
    This topic created in 3328 days ago, the information mentioned may be changed or developed.

    操作 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 replies    2017-06-13 11:41:14 +08:00
    my101du
        1
    my101du  
       Jun 13, 2017
    是用的这个吗?
    https://github.com/mysqljs/mysql

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

    按它的官方文档,一开始就 connection.connect(),然后用完调用 connection.end(); 发现报错,连不上数据库。
    注释掉这两处就可以了。
    imherer
        2
    imherer  
    OP
       Jun 13, 2017
    @my101du 谢谢你的回答。
    用的就是这个,应该不是你这个原因。connection.end();是释放连接吧,和我的问题应该没关系。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5338 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 07:41 · PVG 15:41 · LAX 00:41 · JFK 03:41
    ♥ Do have faith in what you're doing.