结论是光配HikariCP不行,必须同步调大MySQL服务端限制、对齐超时参数、校验系统级文件句柄;max_connections设2000仍显示151是因MySQL启动时按table_open_cache和open_files_limit静默降级;需在[mysqld]下配max_connections=2000、table_open_cache=4000、open_files_limit=65535,并同步配置limits.conf和systemd的LimitNOFILE,重启后双重验证。

直接说结论:光配 HikariCP 不行,必须同步调大 MySQL 服务端限制、对齐超时参数、校验系统级文件句柄,三者缺一不可。
为什么 max_connections 设成 2000 后 SHOW VARIABLES 还显示 151?
MySQL 启动时会做逻辑校验:如果 table_open_cache 太小(默认 400),或 open_files_limit 不足,它会主动截断 max_connections 到安全值。这不是配置没生效,而是被“静默降级”了。
- 在
/etc/my.cnf的[mysqld]段下必须同时设置:max_connections = 2000、table_open_cache = 4000、open_files_limit = 65535 - Linux 系统级限制也要放开:
/etc/security/limits.conf中加两行:mysql soft nofile 65535和mysql hard nofile 65535 - 检查 systemd 是否覆盖:确认
/etc/systemd/system/mysqld.service.d/limits.conf存在且内容为[Service]\nLimitNOFILE=65535 - 重启后双重验证:
mysql -e "SHOW VARIABLES LIKE 'max_connections';"+cat /proc/$(pgrep mysqld)/limits | grep "Max open files"
HikariCP 空闲连接频繁报 “Connection is closed” 怎么办?
根本原因是 MySQL 服务端的 wait_timeout 和连接池的 idle-timeout 没对齐,导致连接在池里“睡过头”被服务端单方面断开。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- 先统一服务端超时:
wait_timeout = 600和interactive_timeout = 600(单位秒) - HikariCP 配置必须严格小于它:
idle-timeout=300000(5 分钟)、max-lifetime=1800000(30 分钟) -
connection-test-query在 MySQL 8.0+ 已不推荐;改用connection-init-sql=SELECT 1或依赖isValid()方法 - 连接字符串里加
?autoReconnect=true&failOverReadOnly=false只能兜底,不能替代超时对齐
读写分离时主从延迟突增,查询还在打到从库?
中间件(如 ShardingSphere、MyCat)若只靠固定权重路由,不感知 Seconds_Behind_Master,就会把读请求继续发往已延迟数秒的从库,造成脏读或查不到最新数据。
- 必须启用动态延迟检测:在中间件配置中打开基于
SHOW SLAVE STATUS的延迟阈值开关(例如 > 1000ms 自动剔除该从库) - 应用层可缓存
Seconds_Behind_Master值,结合本地健康检查做 fallback 路由 - 避免用
SELECT SLEEP(1)类伪健康检查——它不反映真实复制延迟 - 注意:MySQL 8.0 的并行复制(
slave_parallel_workers)开启后,Seconds_Behind_Master可能不准,建议配合performance_schema.replication_applier_status_by_coordinator辅助判断
最常被忽略的是 systemd 对 open_files_limit 的覆盖行为——哪怕 /etc/security/limits.conf 写对了,systemd 仍可能按默认值(通常是 1024)启动 mysqld,导致所有上层配置全部失效。










