解決Node.js的MYSQL模組中握手不活動逾時的錯誤
P粉205475538
P粉205475538 2023-08-22 16:34:16
0
2
543
<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;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板