여전히 저는 환경 설정에 머물러 있습니다..
Redis와 달리 유난히 연결되지 않았던 MySQL, YourSQL이 될 뻔하다 다시 찾은 MySQL..
Docker에서 MySQL 설치 후, 포트가 사용 중이라 오류가 났던 부분과 SpringBoot에 연결하면서 이 비밀번호는 맞는데 자꾸 틀리다고 오류가 났던 부분까지의 과정을 남겨봅니다.
1. MySQL 이미지 다운로드
docker pull mysql:8
2. MySQL 컨테이너 생성
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3306:3306 mysql:8
은 실패
Error response from daemon:
Ports are not available:
exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0:
listen tcp 0.0.0.0:3306:
bind:
Only one usage of each socket address (protocol/network address/port) is normally permitted
기존 Window에 설치된 MySQL이 3306 포트를 사용하고 있기에 컨테이너에 3306 호스트 포트를 할당할 수 없다는 오류가 발생하였습니다.
netstat -ano | findstr 3306
# TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 6628
# 0.0.0.0:3306: IPv4에서 모든 네트워크 인터페이스에 대해 이 포트를 열어 놓고 있음
# 6628: 모든 관련 포트를 점유하고 있는 프로세스의 PID
# TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 6628
# TCP [::]:3306 [::]:0 LISTENING 6628
# IPv6에서 모든 네트워크 인터페이스에 대해 이 포트를 열어 놓고 있음
# TCP [::]:33060 [::]:0 LISTENING 6628
# 33060: MySQL에서 제공하는 X Protocol(엑스 프로토콜)을 사용하는 통신에 사용
# 기존의 SQL 기반 통신 방식과는 다른, JSON 기반 데이터 처리를 지원하기 위해 만들어짐
# JSON 데이터를 쉽게 저장하고 다룰 수 있는 NoSQL 기능을 추가한 것
호스트 운영체제(윈도우)에서 3306 포트를 사용하는지 확인하면 3306 포트가 열심히 듣고있는 걸 확인할 수 있습니다.
프로세스 제거해서 도커가 3306 포트를 사용할 수 있게 해줍니다.
askkill /pid 6628 /f
오류: 프로세스(PID 6628)를 종료할 수 없습니다.
원인: 액세스가 거부되었습니다.
은 실패
→ cmd를 관리자 권한으로 실행해서 해당 프로세스를 kill해주면 됩니다.
하지만, 저는 컨테이너에 다른 포트르 할당하여 생성해볼 예정입니다.
docker run -e MYSQL_ROOT_PASSWORD=password -d -p 3307:3306 mysql:8
# docker run Docker 컨테이너를 실행하는 기본 명령
# -e MYSQL_ROOT_PASSWORD=password: MySQL의 루트 계정(root user) 비밀번호를 지정하는 환경 변수
# -d: Detached mode로 컨테이너를 실행, 터미널에서 실행 로그를 출력하지 않고, 백그라운드에서 컨테이너를 실행
# -p 3307:3306: 포트 포워딩을 설정
# 호스트의 3307 포트를 컨테이너 내부의 3306 포트로 연결
# 로컬 머신에서 localhost:3307로 docker 컨테이너의 MySQL 서버에 접근할 수 있음
처음 명령어와 달리진 점은 포트 포워딩 부분이 달라졌다는 것인데, 호스트의 3307 포트를 컨테이너 내부의 3306 포트로 연결했습니다.
3. SpringBoot 연결
그 다음은 Springboot에서 properties 파일에 MySQL 설정을 해야합니다.
spring:
datasource:
url: "jdbc:mysql://localhost:3306/fastsns"
username: root
password: password
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
위의 설정 파일로는 MySQL을 만날 수 없습니다.
심지어 틀린 부분이 2개나 있습니다.
오류 메시지는 단 하나 뿐😲
하지만, 원인은 자그마치 2개😲!
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
🚨 1. 비밀번호 설정 규칙
대문자, 소문자, 숫자, 특수문자를 포함한 암호 길이 8자 이상으로 설정해야 연결이 제대로 됨
기존에는 비밀번호가 password였는데, Springboot에 MySQL을 연결하고 싶다하면 password123! 정도는 설정해줘야 합니다..🍂
🚨 2. 포트번호 확인
로컬 컴퓨터가 쓰고 있던 포트를 빼앗고 싶지 않았던 전 로컬 3307포트를 사용했었습니다.즉, datasource의 포트번호는 3307이 되야 합니다.
⭐ 최종
spring:
datasource:
url: "jdbc:mysql://localhost:3307/fastsns"
username: root
password: password123!
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
+ 사실은 하나 더 있던 오류😲
Caused by: org.hibernate.HibernateException:
Unable to determine Dialect without JDBC metadata
(please set 'jakarta.persistence.jdbc.url' for common cases
or 'hibernate.dialect' when a custom Dialect implementation must be provided)
원인: Spring Boot 컨테이너가 MySQL Dialect 설정을 못 찾음
해결: dialect 설정 추가
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
📑
참고 자료
Chat GPT
https://yonghwankim-dev.tistory.com/570
[docker] mysql conatiner 생성시 포트포워딩 문제
배경 docker 엔진을 사용하여 mysql container를 생성하기 위해 다음과 같은 명령어를 실행하였습니다. $ docker run -p 3306:3306 —name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=yonghwan -e MY
yonghwankim-dev.tistory.com
https://m.blog.naver.com/gingsero/222350441743
taskkill 액세스가 거부되었습니다.
어라? 80포트로 뭔가 떠있는데 해당 프로세스가 taskkill로 죽여보니 액세스가 거부된다. 기억은 안나지만 ...
blog.naver.com
[Error] 도커 컨테이너 생성시 포트 충돌
docker Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0
velog.io
[Error] 도커 컨테이너 생성시 포트 충돌
docker Error invoking remote method 'docker-start-container': Error: (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0
velog.io
https://velog.io/@jiwonblue/Spring-Boot%EC%99%80-MySQL-%EC%97%B0%EB%8F%99-%EC%98%A4%EB%A5%98
Spring Boot와 MySQL 연동 오류
Spring Boot와 MySQL연동 시 발생한 오류Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persi
velog.io
https://luna-archive.tistory.com/17
Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 해결하기
이번 글에서는 spring boot에서 RDB 세팅을 하다가 겪었던 에러 사항 및 해결 방법에 대해 남기려고 합니다. 최근 spring batch작업을 위해 RDB 연동을 하는데, 아래와 같은 에러를 마주쳤다. Caused by: java.
luna-archive.tistory.com
[mysql] java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
이클립스와 mySQL을 연동하는데 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 이런 에러가 떴다. 에러 이유를 알아보니 root 계정에 접속할 비밀번호가 틀려서 나온 에러라고
kjy1ho.tistory.com
'MinimiProject > 아이돌 티켓팅 접속자 대기열 시스템' 카테고리의 다른 글
[대기열 시스템] RedisTemplate, RedisHash, @Cacheable (1) | 2025.01.25 |
---|---|
[대기열 시스템] HTTP load testing tool, Vegeta 설치(Window) (0) | 2025.01.21 |
[대기열 시스템] objectRedisTemplate과 ClassCastException (0) | 2025.01.19 |
[대기열 시스템] Windows Docker 환경에서 Redis 설치 (0) | 2025.01.05 |
[대기열 시스템] Windows Docker Desktop 설치 (1) | 2025.01.04 |