Infra/Docker

[ERROR] Communications link failure (Docker + MySQL + Spring JdbcTemplate 연동 실패) 에러 해결

kth990303 2022. 4. 24. 14:15
반응형

문제 상황

스프링 환경에서 도커를 이용한 mysql + JdbcTemplate으로 db 연동을 하는 과정에서 아래 에러가 발생했다.

HikariPool 시작 에러

Spring 애플리케이션을 실행하는 도중에 히카리풀에서 에러를 뱉으면서 jdbc 연결이 안되는 현상이었다.

에러 메시지는 아래와 같다.

 

com.mysql.cj.exceptions.CJCommunicationsException: 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.

...

Caused by: java.net.ConnectException: Connection refused

build.gradle의 의존성으로 jdbc를 추가해주었기 때문에 build.gradle 문제는 아니었다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
}

 

+) 일단 이 에러는 매우 포괄적인 원인이므로, 맨 밑에 뜨는 caused by 에러를 보는 것을 추천한다. 이 포스팅의 경우는 connection refused 라는 모호한 에러내용이 전부였던 걸로 기억한다...


문제 원인

1. docker mysql port 번호를 23306:3306 에서 3306:3306으로 바꿔주었다. (포트 번호 충돌)

 

기존에 3306이랑 13306 port를 사용해주고 있다고 판단하여 23306으로 바꿔준 것인데, 3306으로 바꿔주어도 크게 문제는 없었다.

다만, 에러메시지가 아래처럼 바뀌기 시작했다.

 

java.sql.SQLException: Access denied for user 'root'@'172.21.0.1' (using password: YES)

 

2. mysql 권한 확인: 아이디 패스워드 일치 확인

이 에러는 접근 권한이 없다는 에러였기 때문에 application.properties 에서 password가 올바른지 확인해주었다.

 

3. datasource.url 확인

jdbc:mysql://{주소}/{db 명} 과 같이 주소가 짜여져있는지 확인하자.

그렇지 않으면 아래 에러가 발생한다.

 

java.sql.SQLSyntaxErrorException: Unknown database 'example'

 

나는 체스 미션을 진행중이었기 때문에 datasource.url의 example 부분을 chess 로 변경해주었다.

 

+) 참고로 SSL 설정을 하지 않은 문제로도 위와 비슷한 에러가 발생한다고 한다.

그럴 경우에 datasource.url에 useSSL=false 문구를 추가해주면 된다.

나의 경우는 ssl 처리 문제는 아니었어서 이 문구는 크게 상관없었다. 

 

참고글:

https://zziriball.tistory.com/4

 

Task - MySQL SSL Error (com.mysql.cj.jdbc.exceptions.CommunicationsException)

바보(?)가 되지 않기 위해서 시작한 Task App 개발 프로젝트를 시작하고 이제 아주아주 간단한 기능들은 구현이 되어서 API 배포를 해봤어요. API 배포 과정에서 발생했던 별거 아닌 이슈에 대해 트

zziriball.tistory.com

https://codingcoding.tistory.com/995

 

MySql SSL 설정 끄기, JDBC 연결 오류 해결 useSSL=false

MySql SSL 설정 끄기, JDBC 연결 오류 해결 useSSL=false MySql이 5.5 버전부터 였나? SSL 접속을 기본으로 세팅해 놓았습니다. 그래서 SSL 처리를 안 하면 아래 같이 긴~ 에러 메시지를 보여줍니다. 경우에 따

codingcoding.tistory.com


환경세팅으로 고통받을 때가 가장 힘들다.

딱히 바꾼 것도 없는데 갑자기 돌아가기도 한다.

그렇다고 시간이 적게 걸린건가 따져보면 그것도 아니다. 

아무쪼록 환경세팅으로 고통받는 사람들이 적어지길 바라는 마음에서 글을 남겨본다 ㅎㅎ

반응형