GOOD4ME

MySQL Too many connections Error 본문

개발.오류.정리/MySQL

MySQL Too many connections Error

de_youn 2022. 11. 25. 16:23
반응형

Docker 컨테이너 기반으로
FastAPIHive 컨테이너가 구축되어져있다.

Hive MetastoreMySQL을 채택한 상황이며,
FastAPI에서 Hive에 연결하여
데이터의 CRUD가 활발히 이루어지는데,
실수로 연결을 종료하지 않는다면 어떤 일이 발생할까❓

 

MySQL Too many connections Error

 

구글링하면 이미 수 많은 솔루션이 많이 나와있다.
대부분이 MySQL에 접속하여 연결 수의 제한(max_connections) 을 수정하라고 한다.

그러나 필자는 보통의 솔루션처럼은 해결할 수 없었다.
상기의 방법을 사용하려면,
최소 한 번은 MySQL에 접속해서 환경설정을 적용해야하는데,
아니 애초에 접속이 안되는데 뭘 어떻게 접속을 하라는건가❓❓

심지어 MySQL 버전별로 my.cnf의 key-val 세트가 달랐고
이 때문에 문제를 해결함에 있어 난관이 됬었다.

 

MySQL 접속 및 환경설정 없이 문제 해결 방법

 

...
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
...

상기의 문제는 Hive를 실행하면 확인할 수 있었던 오류 화면이다.
원인은 Hive의 MetastoreMySQL을 조회하는 모듈이 있었는데,
모듈을 사용하고 커넥션을 닫지 않은 것이 화근이었거나,
Hive의 재접속이 잦아 발생한 문제일 것이라는 것이 내 추측이다. 정확한 이유를 아신다면 댓글 부탁드립니다.😁

문제 해결 방법은 매우 심플했다.
my.cnf에 추가해야할 내용은 구글링을 통해 알 수 있을테니 생략하겠다.😎 THUG LIFE😎😎😎😎

# 1. service MySQL restart
$ service mysql restart
* Stopping MySQL database server mysqld     [fail]
* Starting MySQL database server mysqld     [ OK ]

# 상단처럼 "[fail]"이 뜨면 수정한 my.cnf 파일이 제대로 반영되지 않은 것❗❗
# MySQL 버전을 확인하고, 해당 버전에서 사용할 수 없는
# key-val 세트를 사용했는지 다시 한 번 확인하고 다음 단계로 고고❗

##########################################################################

# 2. MySQL 프로세스 강제 종료
$ ps aux | grep mysql | grep -v grep

# 상단의 커맨드 실행 결과, "/usr/sbin/mysqld --basedir~" 이라고 뜨는
# 프로세스 번호 찾아서 강제 종료❗❗

$ kill -9 [mysqld pid]

##########################################################################

# 3. service MySQL start
$ service mysql start
* Starting MySQL database server mysqld     [ OK ]

# 일단 MySQL 서비스를 강제 종료한 후, 재시작이 됨

##########################################################################

# 4. Apache Hive 접속
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/hive/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/opt/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
Hive Session ID = ac4dd78d-818c-4033-8fef-51c1594d63dc 

Logging initialized using configuration in jar:file:/opt/hive/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true 
Hive Session ID = 5a25d539-0a84-4658-bb5d-ec719c9f7187 
hive>
반응형
Comments