10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.9 mb
PDF (A4)- 42.0 mb
手册页(TGZ)- 266.1 kb
手册页(邮政编码)- 376.0 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

6.2.21设置帐户资源限制

限制客户端使用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' MAX_QUERIES_PER_HOUR 100;

该语句只修改指定的限制值,帐户在其他方面保持不变。

若要删除限制,请将其值设置为零。例如,取消每小时的次数限制弗朗西斯可以连接,用这个语句:

mysql>修改用户francis @ localhost的MAX_CONNECTIONS_PER_HOUR为0;

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

修改用户user1 @ localhost的最大连接数为0;修改用户user2 @ localhost的连接ALTER USER 'user3'@'localhost'

user1连接限制为10(全局max_user_connections值),因为它有一个MAX_USER_CONNECTIONS零的极限。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),如果在连接发生时服务器还没有完全处理断开。当服务器完成断开处理时,再次允许另一个连接。