首页 > 解决方案 > 一段时间后 MySQL 连接断开

问题描述

我正在使用使用 Node.js 构建的 websocket。我在脚本中添加了一些与数据库的基本交互(简单的插入/更新/选择查询)。问题是大约 30 秒后脚本因以下错误而崩溃:

events.js:291
      throw er; // Unhandled 'error' event
      ^

Error: Connection lost: The server closed the connection.
    at Protocol.end (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/protocol/Protocol.js:112:13)
    at Socket.<anonymous> (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/Connection.js:94:28)
    at Socket.<anonymous> (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (events.js:326:22)
    at endReadableNT (_stream_readable.js:1223:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
Emitted 'error' event on Connection instance at:
    at Connection._handleProtocolError (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/Connection.js:423:8)
    at Protocol.emit (events.js:314:20)
    at Protocol._delegateError (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/protocol/Protocol.js:398:10)
    at Protocol.end (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/protocol/Protocol.js:116:8)
    at Socket.<anonymous> (/home/admin/web/ohrana.ua/public_html/webrtc/node_modules/mysql/lib/Connection.js:94:28)
    [... lines matching original stack trace ...]
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  fatal: true,
  code: 'PROTOCOL_CONNECTION_LOST'
}

我用谷歌搜索了这个并找到了将这部分代码添加到脚本中的解决方案:

mysqlc.on('error',err=>{
    if(err.code==='PROTOCOL_CONNECTION_LOST'){
        mysqlc=null;
        mysqlc=mysql.createConnection(db_params)
    }
    else throw err;
});

然而它并没有帮助。在我将此代码添加到脚本之后,脚本启动和崩溃之间的时间似乎增加了(现在大约是 5-10 分钟),但无论如何脚本崩溃并出现相同的错误。

然后我用谷歌搜索了另一个没有帮助的解决方案。据说加了

connectTimeout:24*60*60*1000

进入我在初始化连接到 mysql.createConnection() 时使用的参数

然而它也没有帮助。所以我被困在这一点上,不知道该怎么做以及如何处理这个错误。需要一些建议。

标签: mysqlnode.jssockets

解决方案


推荐阅读