我有一个Node.JS后端,该后端使用MySQL连接到我的数据库。现在,我使用连接池重新使用打开的连接(如果可用)。目前,我在Node.JS中的配置如下所示:
var pool = mysql.createPool({
connectionLimit: 10,
host: DB_HOST,
user: DB_USER,
password: DB_PASS,
database: DB_BASE,
ssl : {
ca : fs.readFileSync('******'),
key : fs.readFileSync('******'),
cert : fs.readFileSync('******'),
},
charset : 'utf8mb4',
dateStrings: true
})
但是,我的服务器运行在具有2 GB RAM和2个vCPU的Linux机器上,现已配置为在300秒后超时(my.cnf):
wait_timeout = 300
interactive_timeout = 300
我当前面临的问题是,并且我认为这是因为存在此连接池,所以我只释放了一个连接而没有关闭或结束它。这样在MySQL的error.log文件中给了我很多错误,就像这样:
2019-06-30T11:08:59.749390Z 1485 [Note] Aborted connection 1485 to db: 'DBNAME' user: 'server' host: 'XXX.XXX.X.XX' (Got timeout reading communication packets)
我认为发生这种情况是因为该连接仍处于打开状态(已释放但处于打开状态),然后在接下来的5分钟(300秒)内未使用该连接,因此我的服务器会自动将其关闭。这是一个正确的假设,还是我在这里完全错了?我应该在其他地方寻找解决方案吗?
但是,如果我是正确的话,有什么办法可以防止这种情况发生,或者此错误/警告是否真的无关紧要?我考虑将超时设置为默认的8小时,或者在Node.JS中有一种方法,例如在4分钟内未使用时,我不知道会关闭连接,但是我想在更改任何内容之前先听取一些意见。
干杯!