我使用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 }
答案 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地址或通过更改打开的连接端口来解决此问题。