Too many connections 错误解决

在本地部署 PolarDB(MySQL 引擎)时,可能会遇到如下报错:

ERROR 1040 (08004): Too many connections

这意味着数据库连接数达到上限,无法接收新连接。本文将从报错原因、排查方式、连接数调整和超时控制等方面进行全方位总结,帮助你彻底解决这一问题。


一、问题来源:Too many connections

PolarDB 默认的最大连接数(max_connections)一般是 151,如果没有及时释放连接或程序连接池配置不当,很容易达到上限。


二、如何快速排查?

1. 查看当前最大连接数

SHOW VARIABLES LIKE 'max_connections';

2. 查看当前已连接数量

SHOW STATUS LIKE 'Threads_connected';

3. 查看当前连接详情(找出来源)

SHOW PROCESSLIST;

或按来源统计连接数:

SELECT user, host, COUNT(*) AS conn_count
FROM information_schema.processlist
GROUP BY user, host
ORDER BY conn_count DESC;

三、调整最大连接数的方法

方法一:临时生效(不重启)

SET GLOBAL max_connections = 500;
  • ✔ 立即生效,对新连接有效

  • ❌ 重启数据库后失效

  • ⚠ 需要 SUPER 权限

注意:不能用 SET max_connections = 500,那是无效的(session 级不支持)。


方法二:永久生效(推荐)

修改配置文件 /home/polarx/polardbx-engine/my.cnf

[mysqld]
max_connections = 500

然后重启数据库服务:

pkill -f mysqld_safe
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=/home/polarx/polardbx-engine/my.cnf --user=polarx &

四、空闲连接超时设置(清理长期占用连接)

查看当前超时设置:

SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

默认值通常为 28800 秒(8 小时),可按需调整:

SET GLOBAL wait_timeout = 300;
SET GLOBAL interactive_timeout = 300;
  • 单位是:

  • wait_timeout:适用于应用程序连接(非交互)

  • interactive_timeout:适用于命令行连接等交互式连接

  • 设置后对新连接生效,重启后失效

永久生效方式:

配置文件中添加:

[mysqld]
wait_timeout = 300
interactive_timeout = 300

五、完整数据库重启流程(本地部署)

停止数据库(优雅关闭):

/opt/polardbx_engine/bin/mysqladmin -u root -p shutdown

或者强制停止:

pkill -f mysqld_safe
pkill -f mysqld

启动数据库:

/opt/polardbx_engine/bin/mysqld_safe --defaults-file=/home/polarx/polardbx-engine/my.cnf --user=polarx &

检查是否启动成功:

netstat -anlpt | grep 3306

推荐一键重启脚本(restart.sh)

#!/bin/bash
echo "Stopping PolarDB..."
pkill -f mysqld_safe
pkill -f mysqld
sleep 3

echo "Starting PolarDB..."
/opt/polardbx_engine/bin/mysqld_safe --defaults-file=/home/polarx/polardbx-engine/my.cnf --user=polarx &

sleep 2
echo "Done. Listening ports:"
netstat -anlpt | grep 3306

添加权限并使用:

chmod +x restart.sh
./restart.sh

总结

配置项推荐值单位生效方式
max_connections500配置文件或 SET GLOBAL
wait_timeout300配置文件或 SET GLOBAL
interactive_timeout300配置文件或 SET GLOBAL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仅此而已丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值