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

时间:2016-02-22 12:16:50

标签: mysql node.js node-mysql

我使用node-mysql和大多数查询。工作。一些查询不起作用。 我尝试了每个版本的Node(从0.5 ......)到(5.6.0),我也尝试过(4.0)和(4.1),没有任何帮助。

我试图改变,并没有工作。我尝试将sequence文件更改为:this._idleTimeout = -1;并且没有帮助。

我读了这些问题和GitHub,没有任何帮助。

我可以尝试自己修复它,但我需要更多信息。超时在哪里,为什么?什么时候?什么是这种消息?超时来自哪里?

MYSQL_ERROR     { [Error: Handshake inactivity timeout]  
code: 'PROTOCOL_SEQUENCE_TIMEOUT',   fatal: true,   
timeout: 10000 }  

6 个答案:

答案 0 :(得分:13)

好的,超时来自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 / sequence / Sequence.js)

this._timeout  = 100000;

答案 1 :(得分:1)

对于那些在AWS上部署并遇到此错误的用户,您需要更改数据库/群集和add an inbound rule的安全组,其中source是<您的实例的strong>安全组。

入站规则应如下所示:

Type: MySQL/Aurora
Protocol: TCP (default)
Port: 3306 (default)
Source: <security group of instance>
Description: <optional>

答案 2 :(得分:1)

适用于在aws和heroku上部署的人员!输入rds数据库实例settigns并更改inboud规则->源:任何..

Heroku不提供特定于IP的IP,请记住!

答案 3 :(得分:1)

.end()是非阻塞的,但是这可能会导致您的代码遇到与我相同的问题-我只是在不等待操作实际完成的情况下调用.end()。

要真正等待连接结束,您不能仅等待dbConn.end(),因为.end()不会返回承诺。您需要创建一个承诺并将其兑现。如下所示:

来自

connection.end();

对此

connection.end(error => error ? reject(error) : resolve());

对于使用

的池
connection.release();

对此

connection.release(error => error ? reject(error) : resolve());

答案 4 :(得分:0)

对我来说,这是纠正“选择”语句以选择检查 ID 列(主键)而不是类型为 varchar 的列的位置,例如: 不起作用

select from users where userName = 'aa';

工作

select from users where userID = 1;

答案 5 :(得分:-4)

如果您正在使用Amazon的服务,则可以通过更改安全设置中允许的IP地址或通过更改打开的连接端口来解决此问题。