Behebung des Handshake-Inaktivitäts-Timeout-Fehlers im MYSQL-Modul von Node.js
P粉205475538
P粉205475538 2023-08-22 16:34:16
0
2
557
<p>Ich verwende <code>node-mysql</code> und die meisten Abfragen funktionieren einwandfrei. Einige Abfragen funktionieren jedoch nicht. Ich habe jede Version von Node ausprobiert (von 0.5 bis 5.6.0), ich habe auch 4.0 und 4.1 ausprobiert, aber keine hat geholfen. </p> <p>Ich habe versucht, es manuell zu ändern, aber es hat nicht funktioniert. Ich habe versucht, die Datei <code>sequence</code> zu ändern: <code>this._idleTimeout = -1;</code>, aber das hat auch nicht geholfen. </p> <p>Ich habe das Problem und den Kram auf GitHub gelesen, aber es hat nicht geholfen. </p> <p>Ich könnte versuchen, das Problem selbst zu beheben, aber ich benötige weitere Informationen. Wo tritt die Zeitüberschreitung auf? Warum? Wann ist es passiert? Was für eine Nachricht ist das? Woher kommt die Zeitüberschreitung? </p> <pre class="brush:php;toolbar:false;">MYSQL_ERROR { [Fehler: Zeitüberschreitung bei Handshake-Inaktivität] Code: 'PROTOCOL_SEQUENCE_TIMEOUT', fatal: true, Zeitüberschreitung: 10000 }</pre> <p><br /></p>
P粉205475538
P粉205475538

Antworte allen(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;
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage