错误!:SQLSTATE [42000] [1226]'max_user_connections'资源(当前值:30),但max_user_connections配置为1000

时间:2016-04-26 16:26:23

标签: mariadb resource-governor

当mysql用户超过max_user_connections时,访问者会收到Mysql错误,将当前值返回30,但max_connections和max_user_connections设置为1000.出现问题时,CPU几乎达到98%。

在mysql错误日志中,我们收到了很多来自其他用户的拒绝访问错误,大约5000个被拒绝的连接。我的问题不是PHP脚本获取所有这些连接的原因,而是知道为什么不应用配置的变量max_user_connections和max_connections。这些配置为1000,但错误消息返回30.如何可能?

我激活了log_warnings = 2,以获取更多信息,但我们没有获得额外信息。知道为什么会这样做吗?或者如何审核mysql以找到此问题的根源?

收到的错误消息是:

错误!:SQLSTATE [42000] [1226]用户'some_user'已超出'max_user_connections'资源(当前值:30)

select @@session.max_user_connections, @@global.max_connections;
+--------------------------------+--------------------------+
| @@session.max_user_connections | @@global.max_connections |
+--------------------------------+--------------------------+
|                           1000 |                     1000 |
+--------------------------------+--------------------------+` 

 show global variables like '%connections%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| extra_max_connections | 1     |
| max_connections       | 1000  |
| max_user_connections  | 1000  |
+-----------------------+-------+

 show status like '%connected%';
 +-------------------+-------+
 | Variable_name     | Value |
 +-------------------+-------+
 | Threads_connected | 4     |
 +-------------------+-------+

 select user,max_user_connections from mysql.user where          host='localhost'\G

 user: some_user
 max_user_connections: 0
 user: another_user
 max_user_connections: 0`

错误似乎是:  错误:1226 SQLSTATE:42000(ER_USER_LIMIT_REACHED)

消息:用户'%s'已超过'%s'资源(当前值:%ld)

而不是:

错误:1203 SQLSTATE:42000(ER_TOO_MANY_USER_CONNECTIONS)

消息:用户%s已超过“max_user_connections”活动连接

我们正在使用MariaDB,版本:

  select version(); 
  +------------------------+
  | version()              |
  +------------------------+
  | 5.5.44-MariaDB-cll-lve |
  +------------------------+

1 个答案:

答案 0 :(得分:0)

解决方案:

您可以使用以下命令重现错误:

mysqlslap -a --concurrency=500 --number-of-queries 5000 --iterations=500 --engine=innodb --debug-info -utest -p

问题是由州长引起的,我们在服务器上安装了Cloudlinux,但默认情况下此选项设置为OFF,但在此服务器中设置为滥用者。如果CPU高于400 Gobernor将用户的max_user_connections设置为30.

您可以查看/var/log/dbgovernor-restrict.log

上的日志

解决方案si正确设置此值或设置

dbctl --lve-mode off

/etc/container/mysql-governor.xml

<lve use="abuser"></lve>
<restrict level1="60s" level2="15m" level3="1h" level4="1d"     
timeout="1h" log="/var/log/dbgovernor-restrict.log"          

user_max_connections="30"></restrict>

<statistic mode="on"></statistic>
<default>
<limit name="cpu" current="400" short="380" mid="350" long="300">      
</limit>