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