10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 235.6 kb
手册页(Zip)- 347.2 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

6.2.16设置帐户资源限制

限制客户端使用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之前,一个账户根据用户连接的实际主机进行评估。方法启动服务器,可以选择这种较旧的记帐方法——old-style-user-limits选择。在这种情况下,如果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> ALTER USER 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0

如前所述,帐户的同时连接限制由MAX_USER_CONNECTIONS极限和max_user_connections系统变量。假设全局max_user_connections取值为10,三个帐户有各自的资源限制,具体如下:

ALTER USER 'user1'@'localhost' WITH MAX_USER_CONNECTIONS 0;ALTER USER 'user2'@'localhost' WITH MAX_USER_CONNECTIONSALTER USER 'user3'@'localhost' WITH MAX_USER_CONNECTIONS 20

user1连接限制为10(全局max_user_connectionsValue),因为它有一个MAX_USER_CONNECTIONS0的极限。user2而且user3连接限制分别为5和20,因为它们是非零的MAX_USER_CONNECTIONS限制。

中存储帐户的资源限制用户表中行对应的帐户。的max_questionsmax_updates,max_connections列存储每小时限制,而max_user_connections列存储MAX_USER_CONNECTIONS极限。(见第6.2.3节“拨款表”.)

当任何帐户对任何资源的使用有非零限制时,就会发生资源使用计数。

当服务器运行时,它会计算每个帐户使用资源的次数。如果一个帐户在最后一个小时内达到了其连接数的限制,服务器将拒绝该帐户的进一步连接,直到该小时结束。类似地,如果帐户达到了查询或更新数量的限制,服务器将拒绝进一步的查询或更新,直到该小时结束。在所有这些情况下,服务器都会发出适当的错误消息。

资源计数按帐户进行,而不是按客户端进行。例如,如果您的帐户的查询限制为50,则不能通过同时建立两个客户端连接到服务器来将查询限制增加到100。在两个连接上发出的查询一起计算。

当前每小时资源使用计数可以为所有帐户全局重置,也可以为特定帐户单独重置:

  • 要将所有帐户的当前计数重置为零,请发出命令冲洗USER_RESOURCES声明。也可以通过重新加载授权表来重置计数(例如,使用冲洗的特权语句或mysqladmin重载命令)。

  • 个人帐户的计数可以通过再次设置其任何限制重置为零。指定与当前分配给帐户的值相等的限制值。

每小时计数器重置不影响MAX_USER_CONNECTIONS极限。

当服务器启动时,所有计数都从零开始。计数不会在服务器重新启动时进行。

MAX_USER_CONNECTIONS限制,如果帐户当前打开了允许的最大连接数,则可能会发生边缘情况:断开连接后快速连接可能会导致错误(ER_TOO_MANY_USER_CONNECTIONSER_USER_LIMIT_REACHED)如果服务器在连接发生时还没有完全处理断开连接。当服务器完成断开连接处理后,再次允许另一个连接。