首頁  >  問答  >  主體

解決Node.js的MYSQL模組中握手不活動逾時的錯誤

<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粉205475538P粉205475538424 天前462

全部回覆(2)我來回復

  • P粉547420474

    P粉5474204742023-08-23 15:56:17

    對於在AWS 上部署並遇到此錯誤的用戶,您需要對資料庫/叢集的安全性群組進行更改,新增入站規則,其中來源實例的安全群組

    入站規則應如下所示:

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

    回覆
    0
  • P粉155128211

    P粉1551282112023-08-23 09:38:03

    好的,超時是來自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;

    回覆
    0
  • 取消回覆