source

오류!: SQLSTATE[42000] [1226] 'max_user_connections' 리소스(현재 값: 30)가 1000으로 구성되어 있습니다.

manycodes 2022. 10. 27. 23:04
반응형

오류!: SQLSTATE[42000] [1226] 'max_user_connections' 리소스(현재 값: 30)가 1000으로 구성되어 있습니다.

mysql 사용자가 max_user_connections를 초과하여 현재 값이 30으로 반환되지만 max_connections 및 max_user_connections가 1000으로 설정되어 있는 경우 방문자에게 Mysql 오류가 발생합니다.문제가 발생하면 CPU가 거의 98%에 도달합니다.

mysql 오류 로그에서 다른 사용자로부터 약 5000개의 접속 거부 오류가 수신되었습니다.문제는 왜 PHP 스크립트가 이러한 연결을 모두 수행하느냐가 아니라 설정된 변수인 max_user_connections와 max_connections가 적용되지 않는 이유를 알아내는 것입니다.이것들은 1000 으로 설정되어 있습니다만, 에러 메세지는 30 을 반환합니다.그게 어떻게 가능하죠?

자세한 정보를 얻기 위해 log_module=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 |
  +------------------------+

해결책:

다음 명령을 사용하여 오류를 재현할 수 있습니다.

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

이 문제는 Governor가 원인입니다.서버에는 Cloudlinux가 설치되어 있습니다만, 이 옵션은 디폴트로 OFF로 설정되어 있습니다만, 이 서버에서는 오용자로 설정되어 있습니다.CPU가 400보다 높을 경우 Gobernor는 사용자의 max_user_connections를 30으로 설정합니다.

로그는 /var/log/dbgovernor-restrict.log에서 확인할 수 있습니다.

이 값을 올바르게 설정하거나 설정하기 위한 솔루션 si

dbctl --lve-mode off

/etc/syslog/syslog-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>

언급URL : https://stackoverflow.com/questions/36870608/error-sqlstate42000-1226-max-user-connections-resource-current-value-3

반응형