记一次线上数据库用户到达最大连接数错误 - MySQL 1203 错误

前言

用户 admin 连接 MySQL 提示错误: 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 配置文件中有配置, 记得同步修改;

posted @ 2021-05-06 13:44  小鸣Cycling  阅读(1361)  评论(0编辑  收藏  举报