解决Node.js的MYSQL模块中握手不活动超时的错误
P粉205475538
P粉205475538 2023-08-22 16:34:16
0
2
544
<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粉205475538
P粉205475538

全部回复(2)
P粉547420474

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

入站规则应如下所示:

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

好的,超时是来自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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板