前言
连接错误提示: ERROR 1203 : User admin already has more than ‘max_user_connections‘ active connections
这个提示很明显是 用户 admin 的活动连接已经超出max_user_connections
;
这里涉及到两个 MySQL 的系统变量:
- max_user_connections : 任何给定的MySQL用户帐户允许的最大同时连接数。值0(默认值)表示 “无限制。”
-
max_connections : 允许的最大同时客户端连接数
mysqld实际上允许 max_connections + 1个客户端连接。保留额外的连接,以供具有CONNECTION_ADMIN特权(或不建议使用的SUPER 特权)的帐户 使用。通过将特权授予管理员而不是普通用户(不需要该特权的用户),即使连接SHOW PROCESSLIST了最大数量的非特权客户端,管理员也可以连接到服务器并用于诊断问题。
(参考: MySQL 常见问题 >> B.3.2.5 Too many connections )
处理问题
- 使用 root 账号登录(应用连接用的账号是 admin)
- 查询连接参数配置, 发现连接数配置为 200.
show variables like ‘%connect%‘;
- 查询进程, 发现有 201 个进程(其中多的一个为当前登录的 root 账户, 即前面提到的给 super 账户保留的一个额外的连接)
select * from information_schema.processlist order by time desc;
# 或
show processlist;
参考: [8.14.1访问进程列表-每个过程列表条目均包含信息](https://dev.mysql.com/doc/refman/5.7/en/processlist-access.html)
- 修改连接最大配置
修改后再次查询进程, 可发现已经有 221 个进程了;
set global max_connections=500;
set global max_user_connections=0;
注意: 如果在 my.ini
配置文件中有配置, 记得同步修改;