当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 |
+------------------------+
答案 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>