首页 > 解决方案 > 与 MySQL 的节点服务器连接丢失

问题描述

在使用池连接时,与AWS RDS的连接经常丢失,而不会发出任何错误事件等。PROTOCOL_CONNECTION_LOST当 API 服务器收到请求时,mysql 不会返回错误,而是返回空数组作为结果。

我可以看到 RDS 仪表板中的连接已断开,但未发出错误事件。我已经尝试过更改mysql_connections_optionslikeconnectTimeout等解决方案wait_timeout,另外我还尝试过以较短的定期间隔 ping mysql 服务器(返回正确的结果),但连接仍然丢失并且查询返回空数组作为结果而没有任何错误。

这是我的连接代码:

connection = mysql.createPool(mysqlConnectionOptions);
function pingSqlServerForPersistentConnection() {
    console.log("PINGING : ");
    connection.getConnection(function (err) {
        if (err) {
            console.log('MYSQL ERROR CONNECTION : ' + err);

            pingSqlServerForPersistentConnection();
        }
        else {
            if (config.get("APP_NAME") == "prod") {
                setInterval(selectStar, 150000);
            }
            console.log('Connection established');
        }
    });
    connection.on('error', function (err) {
        console.log("MYSQL DISCONNECTED : ", JSON.stringify(err));
        pingSqlServerForPersistentConnection();
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
            console.log("MYSQL : \n PROTOCOL_CONNECTION_LOST");
            pingSqlServerForPersistentConnection();
        }
        if (err.code === 'ETIMEDOUT') {
            console.log("MYSQL : ETIMEDOUT");
            pingSqlServerForPersistentConnection();
        }
    });
}

标签: mysqlnode.jsnpmamazon-rds

解决方案


推荐阅读