Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
찾은 발생 가능한 문제점
1.Mysql 의 경우 기본적으로 8시간 안에 request가 오지 않으면 강제적으로 Connection을 닫아버리기 때문에
오래 request를 안하다가 request를 하면 먹통이 되는 문제점도 있다.
db 연결시 url에 validationQuery 를 붙여줘야한다. 아래 사이트에 자세하게 설명하고 있다 참고하자.
https://engineering-skcc.github.io/cloud/tomcat/apache/performancetest/MySqlDBWaitTimeOut/
https://blog-han.tistory.com/40
2.db의 접속 권한문제는 아니였다.
만일 권한 문제일 경우 권한 설정을 해주자
# *.*:모든 db접근, %:모든 ip 허용
grant all privileges on *.* to 'root'@'%' identified by '1234';
# 반영
flush privileges;
#권한 확인
select host, user from user;
3.db max Connection을 초과한것도 아니였으며 sleep된 connection도 없었다.
max Connection을 초과한경우, db 커넥션을 많이 시도하는 경우에서 발생
# 현재 자신의 커넥션 확인
show status where variable_name = 'Threads_connected';
# 현재 설정된 max_connetions 확인하기
show variables like 'max_connections';
# max_connetions 늘리기
set global max_connetions=1000;
sleep의 경우, db 를 사용하는 어플리케이션에서 mysql 접속을 한 뒤에 접속세션을 종료하지 않고 그냥 놔두면 발생
interactive_timeout 과 wait_timeout 의 주기를 짧게 설정해주자.
1) global 설정
mysql> set global interactive_timeout=10;
mysql> set global wait_timeout=10;
2) Session 설정
mysql> set interactive_timeout=10;
mysql> set wait_timeout=10;
단, 위와 같은 방법은 mysql 데몬 재시작 시 초기 값으로 돌아갑니다.
mysql 시작 시 고정된 값으로 설정하기 위해서는 아래와 같이 my.cnf 파일을 통해 설정합니다.
# vi /etc/my.cnf
[mysqld]
interactive_timeout=10
wait_timeout=10
나의 경우
리눅스 서버가 다운되면서 기존에 설정된 방화벽 정책도 초기화 되면서
DB 포트의 인/아웃 바운드 정책도 같이 초기화 되어
외부에서 접속이 안되는 문제였다,
다시 정책을 설정해주고 리눅스 방화벽을 재시작 해줫더니 외부에서 접속이 가능해졌다.
#mysql 포트를 먼저 열어준다.
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
#3306에 대한 인바운드 설정
iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
#3306에 대한 아웃바운드 설정
iptables -I OUTPUT 1 -p tcp --dport 3306 -j ACCEPT
#방화벽 재실행
firewall-cmd --reload
'나의 주니어 개발 일기 > DB' 카테고리의 다른 글
MYSQL 도커 사용시) ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) (0) | 2022.07.04 |
---|---|
[MySql]모든계정으로 mysql접근이 막혓을 경우 참고 (0) | 2022.06.13 |
mysql 날짜타입 비교 Datetime vs Timestamp (0) | 2022.01.21 |
MYISAM vs InnoDB (0) | 2022.01.13 |
INSERT/UPDATE/DELETE 트리거 만들기 (0) | 2021.09.17 |