限制客户端使用MySQL服务器资源的一种方法是设置全局max_user_connections.
系统变量到非零值。这限制了任何给定帐户可以制作的同时连接的数量,但对客户端可以执行的内容没有限制。另外,设置max_user_connections.
不启用个人帐户的管理。MySQL管理员对这两种类型的控制都很感兴趣。
为了解决这些问题,MySQL允许个人帐户使用这些服务器资源:
一个帐户每小时可以发出的查询次数
一个帐户每小时可以发出的更新次数
一个帐户每小时可以连接到服务器的次数
一个帐号同时连接到服务器的次数
客户端可以发出的任何语句都将根据查询限制计数。只有修改数据库或表的语句才会受到更新限制的限制。
一个”账户”在此上下文中,对应于中的一行mysql.user
系统表。也就是说,连接是根据用户
和宿主
中的值用户
应用于连接的表行。例如,一个帐户' usera ' @ ' % .example.com '
中对应的一行用户
表有用户
和宿主
的值Usera.
和% .example.com
,允许Usera.
从任何主机连接example.com.
领域。在这种情况下,服务器将此行中的资源限制统称为所有连接Usera.
从任何主机example.com.
域名,因为所有这些连接都使用相同的帐户。
在MySQL 5.0之前”账户”根据用户连接的实际主机进行评估。可以通过启动服务器来选择此旧的计费方法- 型式 - 用户限制
选择。在这种情况下,如果Usera.
连接的同时host1.example.com
和host2.example.com
,服务器对每个连接分别应用帐户资源限制。如果Usera.
连接从host1.example.com
,服务器将该连接的限制与该主机的现有连接一起应用。
要在帐户创建时间为帐户建立资源限制,请使用创建用户
声明。若要修改现有帐户的限制,请使用改变用户
.提供一个和
名称将每个资源命名为有限。每个限制的默认值为零(无限制)。例如,要创建一个可以访问的新帐户客户
数据库,但仅以有限的方式,发出以下语句:
mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank' -> WITH MAX_QUERIES_PER_HOUR 20 -> MAX_UPDATES_PER_HOUR 10 -> MAX_CONNECTIONS_PER_HOUR 5 -> MAX_USER_CONNECTIONS 2;
控件中不需要指定所有的限制类型和
条款,但那些被命名的可以以任何顺序出现。每小时限制的值应该是表示每小时计数的整数。为max_user_connections.
,该限制是一个整数,表示该帐户的最大同时连接数。如果这个限制被设置为零,全局max_user_connections.
系统变量值决定同时连接的数量。如果max_user_connections.
也是零的,帐户没有限制。
若要修改现有帐户的限制,请使用改变用户
声明。下面的语句更改查询限制弗朗西斯
100年:
mysql> ALTER USER 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;
该语句只修改指定的限定值,否则保持帐户不变。
要删除一个限制,请将其值设置为零。例如,取消每小时的次数限制弗朗西斯
可以连接,使用这个语句:
mysql>使用max_connections_per_hour 0更改用户'francis'@'localhost';
如前所述,帐户的同时连接限制由max_user_connections.
限制和max_user_connections.
系统变量。假设全局max_user_connections.
值为10,三个帐户具有指定的单个资源限制如下:
使用max_user_connections 0更改用户'user1'@'localhost'0;使用max_user_connections 5更改用户'user2'@'localhost';使用max_user_connections 20更改用户'user3'@'localhost';
User1.
具有10的连接限制(全球max_user_connections.
值),因为它有max_user_connections.
零的极限。user2.
和User3.
连接限制分别为5和20,因为它们是非零的max_user_connections.
限制。
服务器存储在账户中的资源限制用户
表行对应于帐户。这max_questions
,max_updates.
,max_connections
列存储每小时限制,而max_user_connections.
列存储max_user_connections.
限制。(看第6.2.3节“授予表”.)
当任何帐户对其任何资源的使用有非零限制时,就会发生资源使用计数。
当服务器运行时,它会计算每个帐户使用资源的次数。如果一个帐户在最近一小时内达到其连接数限制,服务器将拒绝该帐户的进一步连接,直到该小时结束。类似地,如果帐户达到查询或更新的数量限制,服务器将拒绝进一步的查询或更新,直到时间结束。在所有这些情况下,服务器都会发出适当的错误消息。
资源计数每个帐户发生,而不是每个客户端。例如,如果您的帐户具有50的查询限制,则通过将两个同时的客户端连接与服务器进行两个同时的客户端连接,您无法将其限制增加到100。在两个连接上发出的查询将被计算在一起。
当前每小时的资源使用计数可以全局重置所有帐户,或单独重置一个给定帐户:
要将所有帐户的当前计数重置为零,发出a
冲洗USER_RESOURCES
声明。计数也可以通过重新加载授权表来重置(例如,使用冲洗的特权
语句或一个mysqladmin重载命令)。通过设置任何限制,可以将单个帐户的计数重置为零。指定等于当前分配给帐户的值的限制值。
每小时计数器的重置不影响max_user_connections.
限制。
当服务器启动时,所有计数都会在零处开始。计数不会通过服务器重新启动。
为了max_user_connections.
限制,如果帐户当前已打开其允许的最大连接数,则可能发生边缘情况:ER_TOO_MANY_USER_CONNECTIONS
或er_user_limit_rachered
)如果通过连接发生时服务器没有完全处理断开连接。当服务器完成断开处理时,另一个连接允许更多连接。