MySQL 可通过设置用户级别的连接数限制,控制每个账户在同一时间内允许的最大连接数量。这个功能对防止资源滥用、提升数据库稳定性很有帮助。主要通过 GRANT 语句中的 WITH MAX_USER_CONNECTIONS 子句实现。
1. 设置单个用户的最大连接数
在创建或修改用户时,可以指定该用户最多能同时建立多少个连接。
例如:创建一个新用户,并限制其最多只能有 5 个并发连接:CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password';<br>GRANT ALL ON app_db.* TO 'dev_user'@'localhost'<br> WITH MAX_USER_CONNECTIONS 5;
如果是修改已有用户:
GRANT USAGE ON *.* TO 'dev_user'@'localhost'<br> WITH MAX_USER_CONNECTIONS 3;
说明: 使用 GRANT USAGE 可以仅修改资源限制而不影响原有权限。
2. 全局连接数限制(可选)
除了用户级别,MySQL 还支持全局最大连接数控制,由系统变量 max_connections 控制,默认一般为 151。
查看当前值:SHOW VARIABLES LIKE 'max_connections';
临时修改(重启后失效):
SET GLOBAL max_connections = 200;
如需永久生效,需在配置文件(如 my.cnf 或 my.ini)中添加:
[mysqld]<br>max_connections = 200
3. 验证连接限制是否生效
可通过查询 performance_schema 或 information_schema 查看当前连接情况。
查看某个用户的当前连接数:SELECT user, COUNT(*) FROM performance_schema.threads<br>WHERE TYPE = 'FOREGROUND' AND user = 'dev_user'<br>GROUP BY user;
检查用户的资源限制配置:
SELECT User, Host, Max_user_connections<br>FROM mysql.user WHERE User = 'dev_user';
4. 注意事项
设置为 0 表示“无限制”,这是默认值。 用户连接限制是在每次新建连接时检查的,已存在的连接不会被强制断开。 如果应用使用连接池,注意连接池中的连接也会被计入。 修改权限后建议刷新权限:FLUSH PRIVILEGES;(虽然 GRANT 通常自动刷新)。基本上就这些。合理设置用户连接数,有助于避免个别用户耗尽数据库连接资源,保障服务稳定。
