오류!: 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
'source' 카테고리의 다른 글
페이지가 로드되었을 때 기능을 실행하는 방법은 무엇입니까? (0) | 2022.10.27 |
---|---|
SQL에서 날짜 간 평균 시간 계산 (0) | 2022.10.27 |
jQuery를 사용하여 Ajax 요청 중단 (0) | 2022.10.27 |
const-correct는 컴파일러에 최적화를 위한 더 많은 공간을 제공합니까? (0) | 2022.10.27 |
테이블에서 모두 삭제 (0) | 2022.10.27 |