MySQL 데이터베이스 연결 실패, 오류: ERROR 1040(HY000): 연결이 너무 많습니다.

MySQL 데이터베이스 연결 실패, 오류: ERROR 1040(HY000): 연결이 너무 많습니다.

문제 설명:

MySQL에 연결할 때 "ERROR 1040 (HY000): 너무 많은 연결"이 갑자기 나타납니다. 문자 그대로의 의미에 따르면 데이터베이스에 터미널이 너무 많아야 하는데, 다음은 mysql 설정 파일을 수정하여 문제를 해결하는 방법이다.

원인 분석:

MySQL 연결의 기본 수는 151입니다.

해결책:

임시 구성

프로덕션 환경 데이터베이스에 최대 연결 수가 나타나면 임시 구성을 사용한 후 구성 파일을 수정하고 다음 재시작을 기다리는 것이 좋습니다.
데이터베이스에 로그인할 수 없는 경우 먼저 연결된 애플리케이션을 중지하십시오.
1. 현재 데이터베이스 연결 수 보기

mysql> show variables like 'max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

2. 데이터베이스 연결 수를 수정합니다(참고: 기본값으로 복원하려면 다시 시작하세요).

mysql> set GLOBAL max_connections=500;
Query OK, 0 rows affected (0.00 sec)

3. 수정된 최대 연결 수 확인

mysql> show variables like 'max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 500   |
+-----------------+-------+
1 row in set (0.00 sec)

영구 구성

1. mysql 구성 파일 my.cnf를 엽니다.

[mysqld]
max_connections = 500

max_connections 필드를 찾아 최대 연결 수를
500 이상으로 변경하고 수정을 완료한 후 서버를 다시 시작하세요! !

MySQL은 연결 수(총 연결 수, 활성 연결 수, 최대 동시 연결 수)를 확인합니다.

mysql> show status like 'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 1     |
| Threads_created   | 1     |
| Threads_running   | 2     |
+-------------------+-------+
4 rows in set (0.01 sec)

Threads_connected: 이 값은 열린 연결 수를 나타냅니다.

Threads_running: 활성화된 연결 수를 나타내는 값으로 일반적으로 연결된 값보다 훨씬 낮은 값입니다.

Threads_connected는 현재 연결 수를 나타내는 show processlist와 동일한 결과를 갖습니다. 정확하게 말하면 Threads_running은 현재 동시 실행 수를 나타냅니다.

MySQL 서버의 정상적이고 원활한 작동을 보장하려면 MySQL 서버의 스레드 수가 합리적인 범위 내에 있어야 합니다. Threads_created는 생성된 Thread 개수를 나타내며, Threads_created를 보면 MySQL 서버의 프로세스 상태를 확인할 수 있습니다.

mysql> show global status like 'Thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 1     |
| Threads_created   | 1     |
| Threads_running   | 2     |
+-------------------+-------+
4 rows in set (0.00 sec)

MySQL 서버 구성 파일에 thread_cache_size를 설정하면 클라이언트 연결이 끊어지면 이 클라이언트를 처리하는 서버의 스레드가 파괴되는 대신 다음 클라이언트에 응답하기 위해 캐시됩니다(캐시 수가 상한에 도달하지 않은 경우).

Threads_created는 생성된 스레드 수를 나타냅니다.Threads_created 값이 너무 큰 것으로 확인되면 MySQL 서버가 스레드를 생성하고 있음을 나타내며 이 역시 상대적으로 리소스 집약적입니다. 구성 파일에서 thread_cache_size 값을 적절하게 늘릴 수 있습니다. 서버 thread_cache_size 값을 쿼리합니다.

mysql> show variables like 'thread_cache_size';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 100    |
+-------------------+-------+
1 row in set (0.01 sec)

명령: show processlist;
루트 계정인 경우 모든 사용자의 현재 연결을 볼 수 있습니다. 다른 일반 계정인 경우에는 본인이 사용하고 있는 연결만 볼 수 있습니다.
show processlist 명령은 처음 100개 항목만 나열합니다. 항목을 모두 나열하려면 show full processlist를 사용하세요.

mysql> show processlist;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time | State                  | Info             |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
|  5 | event_scheduler | localhost | NULL | Daemon  | 2405 | Waiting on empty queue | NULL             |
|  8 | root            | localhost | NULL | Query   |    0 | init                   | show processlist |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
2 rows in set (0.00 sec)

명령: 상태 표시;

mysql>show status like '%变量名%';

변수명은 다음과 같습니다.
Aborted_clients 클라이언트가 연결을 제대로 닫지 않아 중단된 연결 수입니다.
Aborted_connects 실패한 MySQL 서버 연결 시도 횟수입니다.
연결 MySQL 서버에 연결을 시도한 횟수입니다.
Created_tmp_tables 명령문이 실행될 때 생성된 암시적 임시 테이블 수입니다.
Delayed_insert_threads 사용 중인 지연 삽입 프로세서 스레드 수입니다.
Delayed_writes INSERT DELAYED로 작성된 행 수입니다.
Delayed_errors 일부 오류가 있는 INSERT DELAYED로 작성된 행 수입니다(중복 키 값 가능).
Flush_commands FLUSH 명령이 실행된 횟수입니다.
Handler_delete 테이블에서 행 삭제를 요청한 횟수입니다.
Handler_read_first는 테이블의 첫 번째 행을 읽는 횟수를 요청합니다.
Handler_read_key는 키를 기반으로 읽을 행 수를 요청합니다.
Handler_read_next 키를 기반으로 행 읽기를 요청한 횟수입니다.
Handler_read_rnd는 고정된 위치를 기준으로 행을 읽는 횟수를 요청합니다.
Handler_update 테이블의 행 업데이트가 요청된 횟수입니다.
Handler_write 테이블에 행을 삽입하도록 요청한 횟수입니다.
Key_blocks_used 키 캐시에 사용되는 블록 수입니다.
Key_read_requests 캐시에서 키 값을 읽기 위한 요청 수입니다.
Key_reads 디스크에서 키 값을 물리적으로 읽는 횟수입니다.
Key_write_requests 키워드 블록이 캐시에 기록되도록 요청된 횟수입니다.
Key_writes 키-값 블록이 디스크에 물리적으로 기록되는 횟수입니다.
Max_used_connections 동시에 사용되는 최대 연결 수입니다.
Not_flushed_key_blocks 키 캐시에서 변경되었지만 아직 디스크에 플러시되지 않은 키 블록입니다.
Not_flushed_delayed_rows INSERT DELAY 대기열에 쓰기를 기다리는 행 수입니다.
Open_tables 열려 있는 테이블 수입니다.
Open_files 열려 있는 파일 수입니다.
Open_streams 오픈 스트림 수(주로 로깅에 사용)
Opened_tables 오픈된 테이블 수.
질문 서버로 전송된 쿼리 수입니다.
Slow_queries long_query_time보다 오래 걸리는 쿼리 수입니다.
Threads_connected 현재 열려 있는 연결 수입니다.
Threads_running 휴면 상태가 아닌 스레드 수입니다.
가동 시간 서버가 작동한 시간(초)입니다.

추천

출처blog.csdn.net/weixin_46010834/article/details/130102297