mysql - 与 MySQL 的节点服务器连接丢失
问题描述
在使用池连接时,与AWS RDS的连接经常丢失,而不会发出任何错误事件等。PROTOCOL_CONNECTION_LOST
当 API 服务器收到请求时,mysql 不会返回错误,而是返回空数组作为结果。
我可以看到 RDS 仪表板中的连接已断开,但未发出错误事件。我已经尝试过更改mysql_connections_options
likeconnectTimeout
等解决方案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();
}
});
}
解决方案
推荐阅读
- javascript - webrtc:mediaDevices.enumerateDevices() 返回空 deviceId
- reactjs - 如何使用函数为 React-Router 制作地图?
- ios - 如何在 SwiftUI 中将项目与 VStack 内的顶部对齐?
- node.js - 使用 sequelize 在 nodejs 和 Postgres 中插入错误
- android - 在android studio中运行我的第一个flutter应用程序时出现问题
- python - Python 是否有 Parquet 等价物?
- android - 如何在不复制和粘贴其父 onMeasure 实现的情况下修改自定义 TextView WRAP_CONTENT 高度?
- javascript - 如何在 React js 中读取和更新 csv 文件
- flutter - 向 Flutter 中的默认 User 类添加新属性
- python - 蟒龟在移动时留下点