我正在将 Sequelize (v6.35) 与 MySQL + Express 应用程序一起使用,并且我遇到了一个问题,我的数据库偶尔会达到最大连接限制 (500)。这种情况每天都会发生一两次。出现此错误时我必须手动重新启动服务器。
我已经配置了连接池中的最大连接数,并且还尝试了不同的选项。我已经为此工作了一个多月,但尚未找到解决方案。我的其他具有类似设置的项目没有这个问题。
可能是什么导致了这个问题?
这是我的续集实例。
// sequelize.js
export const sequelize = new Sequelize(database, username, password, {
host,
dialect: "mysql",
logging: false,
pool: {
max: 10,
min: 0,
acquire: 30000,
idle: 10000,
},
retry: {
max: 3,
match: ["ETIMEDOUT", Sequelize.ConnectionError],
},
});
这是主要入口点。
// main.js
sequelize
.authenticate()
.then(() => {
console.log("🔗 DB connected!");
createServer().then((app) =>
app.listen(PORT, () => {
console.log(`🚀 Server ready at port: ${PORT}`);
}),
);
})
.catch((err) => {
console.log(`🚨 Failed to connect db: ${err.message}`);
sequelize.close();
});
mysql服务器限制连接数。您可以通过以下方式检查当前值:
mysql -e 'show variables like "max_connections"'
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 2000 |
+-----------------+-------+
您可以使用以下方式更改当前值:
mysql -e 'SET global max_connections = 2500'
但是这个值会在 mysql 服务器重新启动时重置。要永久更改这些值,您必须在
/etc/
中编辑配置文件,有时是 /etc/my.cnf
,有时是 /etc/mysql.d/*
。添加在[mysqld]
部分:
max_connections = 2500