首页  >  问答  >  正文

解决Node.js的MYSQL模块中握手不活动超时的错误

<p>我正在使用<code>node-mysql</code>和大部分查询都能正常工作。但是有些查询无法工作。 我尝试了Node的每个版本(从0.5...到5.6.0),我还尝试了4.0和4.1,但都没有帮助。</p> <p>我尝试了手动更改,但没有效果。我尝试将<code>sequence</code>文件更改为:<code>this._idleTimeout = -1;</code>,但也没有帮助。</p> <p>我阅读了问题和GitHub上的内容,但没有帮助。</p> <p>我可以尝试自己修复,但我需要更多信息。超时是在哪里发生的?为什么?何时发生的?这是什么类型的消息?超时是从哪里来的?</p> <pre class="brush:php;toolbar:false;">MYSQL_ERROR { [Error: Handshake inactivity timeout] code: 'PROTOCOL_SEQUENCE_TIMEOUT', fatal: true, timeout: 10000 }</pre> <p><br /></p>
P粉205475538P粉205475538424 天前456

全部回复(2)我来回复

  • P粉547420474

    P粉5474204742023-08-23 15:56:17

    对于在 AWS 上部署并遇到此错误的用户,您需要对数据库/集群的安全组进行更改,添加入站规则,其中 实例的安全组

    入站规则应如下所示:

    类型:MySQL/Aurora
    协议:TCP(默认)
    端口:3306(默认)
    源:<实例的安全组>
    描述:<可选>

    回复
    0
  • P粉155128211

    P粉1551282112023-08-23 09:38:03

    好的,超时是来自Protocol.js文件的第162行。如果你查看node-mysql,你会看到查询的变量是"timeout"。如果你将超时设置为比默认值10000要高得多的值,那么错误应该会消失。一个例子是

    pool = require('mysql').createPool({
        connectionLimit : 1000,
        connectTimeout  : 60 * 60 * 1000,
        acquireTimeout  : 60 * 60 * 1000,
        timeout         : 60 * 60 * 1000,
        host            : process.env.DB_HOST,
        user            : process.env.DB_USERNAME,
        password        : process.env.DB_PASSWORD,
        database        : process.env.DB_DATABASE
    });

    你也可以在Sequence.js文件(node_modules/mysql/lib/protocol/sequences/Sequence.js)中编辑超时时间

    this._timeout  = 100000;

    回复
    0
  • 取消回复