Mysql:每个用户的最大连接数 - 可能吗?

ano*_*one 6 mysql

是否可以设置一个用户(不是所有用户的组合,只有一个特定用户)在 mysql 中的给定时间可能拥有的最大打开连接数?

例如:

如果我有一个用户“user1234”,并且只想允许他在任何给定时间最多打开 10 个连接。

谢谢。

Rol*_*DBA 8

您可以按每个用户每小时进行设置。

WITHMySQL GRANT命令的选项下,yu 给出了以下内容:

with_option:
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
Run Code Online (Sandbox Code Playgroud)

您可以设置

  • 每小时查询次数
  • 每小时更新一次
  • 每小时插入数
  • 并发连接(不是每次,而是在任何给定时间)

这可以为您提供更精细的每小时粒度,不仅包括所建立的连接数,还包括可以执行的连接数。

这些用户授予的列位于 mysql.user 中:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.29 MySQL Community Server (GPL)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select column_name from information_schema.columns
    -> where table_schema='mysql'
    -> and table_name='user'
    -> and column_name like 'max%'
    -> order by ordinal_position;
+----------------------+
| column_name          |
+----------------------+
| max_questions        |
| max_updates          |
| max_connections      |
| max_user_connections |
+----------------------+
4 rows in set (0.01 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

我之前写过这些事情

你原来的问题

如上所示,您可以设置用户每小时的用户限制。但是,我注意到您只想为任何给定用户打开数据库连接。

您可能需要一些特殊的自定义身份验证来计算用户拥有的连接数。在 MySQL 5.1+ 中,您可以编写以下脚本:

SELECT COUNT(1) ConnectionCount,user
FROM information_schema.processlist
WHERE user <> 'system user'
GROUP BY user;
Run Code Online (Sandbox Code Playgroud)

这将使您能够了解任何已连接用户的计数。

您可能需要研究连接池和持久连接来调节连接的用户数量。


小智 3

grant usage on *.* to user1234@'%' with max_user_connections 10;
Run Code Online (Sandbox Code Playgroud)

请运行上面的命令。