应部署连接池式代理(如ProxySQL)实现排队限速与连接复用,而非盲目调高max_connections;需配置mysql_servers的max_connections、启用sticky_conn、设置mysql-connection_delay,并确保应用全部流量经代理接入。

连接突增时 max_connections 立刻打满怎么办
直接调高 max_connections 是最常见反应,但治标不治本——新连接仍会瞬间压垮后端线程、触发 Too many connections 错误,且 MySQL 本身对高并发连接的上下文切换开销极大。真正要拦在 MySQL 前面的,是能排队、限速、复用连接的代理层。
实操建议:
- 别等告警才动手:提前在监控里盯住
Threads_connected和Threads_running的差值,超过max_connections的 70% 就该介入 -
max_connections不宜盲目调高,每增加 100 连接,MySQL 内存占用通常多 2–3MB(取决于sort_buffer_size等参数),可能触发 OOM - 优先启用连接池式代理(如 ProxySQL、MySQL Router),而非单纯 TCP 转发(如 HAProxy)——后者不复用连接,只是把压力原样透传
ProxySQL 的 mysql-server_version 和 mysql-connection_delay 怎么配才不丢连接
ProxySQL 默认不缓冲连接,新连接来一个就往 MySQL 扔一个;必须显式开启连接池和延迟策略,否则跟没加代理一样。
关键配置点:
- 在
mysql_servers表中设置max_connections(代理到后端的上限),这个值应 ≤ MySQL 实际max_connections,留出管理连接余量 - 启用连接复用:确保
mysql-query_rules中对应规则的apply为 1,且sticky_conn设为 1(避免事务中途切库) - 加缓冲队列:通过
mysql-connection_delay参数(单位毫秒)控制新连接等待超时,配合mysql-pool_idle_timeout回收空闲连接,防止长连接堆积 - 验证是否生效:查
stats_mysql_connection_pool表,看ConnUsed和ConnFree是否有稳定波动,ConnErr应接近 0
应用侧还连着 MySQL 直连地址?那代理等于白搭
只要有一部分流量绕过代理直连 MySQL,连接突增时所有缓冲策略都会失效——因为真实压力没被统一调度。
必须收敛入口:
- 停用所有硬编码的
localhost:3306或内网 IP + 端口,改用代理地址(如proxysql:6033) - 检查 ORM 配置:Django 的
DATABASES、Spring Boot 的spring.datasource.url、Laravel 的.env,确认端口已从 3306 改为 ProxySQL 的监听端口(默认 6033) - 注意 DNS 缓存:K8s 中若用 Service 名,需确认
ClusterIP没被本地/etc/hosts或容器内 DNS 缓存覆盖 - 上线前做连接验证:用
mysql -h proxysql -P 6033 -u test手动连,再查SELECT host FROM information_schema.processlist,结果应显示连接来自 ProxySQL IP,而非应用本机
为什么用了 ProxySQL 还出现 Connection refused
这通常不是 MySQL 拒绝,而是 ProxySQL 自身没起来、监听失败,或健康检查把后端标 offline 了。
排查顺序很实际:
- 先看 ProxySQL 日志:
tail -f /var/lib/proxysql/proxysql.log,搜ERROR和OFFLINE,常见是后端 MySQL 的wait_timeout小于 ProxySQL 的ping_interval,导致心跳失败 - 检查监听状态:
ss -tlnp | grep :6033,确认 ProxySQL 进程真在监听,而不是被 SELinux 或防火墙拦截 - 验证后端可用性:
SELECT * FROM mysql_servers WHERE status != 'ONLINE',如果全是SHUNNED,说明健康检查连续失败,得调低mysql-monitor_username权限或检查后端网络连通性 - 别忽略配置加载:ProxySQL 启动后要执行
SQLOAD TO RUNTIME和SAVE TO DISK,否则配置只在内存里,重启即丢
连接代理不是加个中间件就完事,它自己就是新的单点和状态中心——配置错一点、监控漏一眼,缓冲就变成断点。


















