You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS应用中如何正确关闭MySQL连接池?

正确关闭mysql2连接池的方法

你之前在每个请求处理函数里调用pool.end()的做法是错的——连接池的核心作用是复用数据库连接,一旦调用pool.end(),整个连接池会被销毁,所有现有连接都会关闭,后续请求再用连接池自然会报the pool is close错误。

正确的关闭时机

连接池不需要每次请求后都关闭,只需要在以下场景下关闭:

  • 应用程序正常退出时(比如收到停止信号、手动终止进程)
  • 脚本类应用执行完毕、不再需要数据库连接时

具体实现步骤

在你的Express应用入口文件(比如app.ts或index.ts)中,监听进程的退出信号,在回调里关闭连接池:

import { pool } from './config/db';
// 这里放你的Express应用初始化代码(比如app.listen等)

// 监听Ctrl+C触发的SIGINT信号
process.on('SIGINT', async () => {
  console.log('正在关闭数据库连接池...');
  await pool.end();
  console.log('连接池已关闭,应用退出');
  process.exit(0);
});

// 监听服务器部署时的SIGTERM终止信号
process.on('SIGTERM', async () => {
  console.log('收到终止信号,关闭数据库连接池...');
  await pool.end();
  console.log('连接池已关闭,应用退出');
  process.exit(0);
});

关键说明

  • 你的pool是全局单例连接池,整个应用生命周期只需要初始化一次,所有请求共享这个池
  • 每次调用pool.execute()后,mysql2会自动将连接归还到连接池,不需要手动释放
  • 只有当整个应用要停止运行时,才需要调用pool.end()优雅关闭所有连接,避免数据库残留无效连接

内容的提问来源于stack exchange,提问作者best_of_man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:35:17