IDE: IntelliJ
Spring Boot: 3.4.1
Java: 21
EC2 Linux: Ubuntu
MySQL이 Docker 컨테이너에서는 잘 실행되는데 DBeaver에서는 연결되지 않는 문제가 발생했다.

DBeaver 오류창에는 Access denied for user 'root'@'localhost' (using password: YES) 라고 떴다. 검색해보니 해당 오류는 비밀번호가 일치하지 않을 때 발생한다고 했다. 하지만 내 경우엔 테스트 용도로 만든 DB라 비밀번호를 아주 단순하게 설정했기 때문에 다른 이유가 있을 거라고 생각했다. 그렇지만 짐작만으로 코딩을 할 수는 없기에 비밀번호를 확인해 보았다.
docker exec -it [MySQL 컨테이너 ID] bash
echo $MYSQL_ROOT_PASSWORD
상단 명령어를 입력하면 MySQL 비밀번호를 확인할 수 있다. 확인해보니 역시나 비밀번호를 잘못 입력한 건 아니었다.
문제의 원인은 Dbeaver가 같은 포트 번호(3306)로 Mac에 설치된 로컬 MySQL 서버에 이미 연결 중이었기 때문이었다.
lsof -i :3306

터미널에 상단 명령어를 입력하면 현재 실행 중인 MySQL 프로세스를 확인할 수 있다. 조회 결과를 보면 두개의 프로세스가 실행중이다. 첫번째가 로컬 MySQL이고 두번째가 Docker 컨테이너에서 실행중인 MySQL이다.
sudo kill -9 [PID 번호 입력]
상단 명령어로 로컬 MySQL을 종료한다. 명령어를 입력하면 비밀번호 입력란이 생기는데, 여기서 주의할 점은 MySQL 비밀번호가 아닌 내 PC의 사용자 비밀번호를 입력해야 한다는 것이다.
이후 step1의 lsof -i :3306 명령어를 입력해 프로세스가 종료되었는지 확인한다.
*만약 프로세스가 그대로 살아 있다면(PID 번호는 바뀌었을 것이다) 이것은 Mac에서 brew로 설치한 MySQL은 기본적으로 launchctl이나 brew services를 통해 백그라운드에서 자동 실행되게 설정되어 있기 때문이다. 이 문제는 아래 명령어를 입력하여 해결할 수 있다.
brew services stop mysql
이제 다시 Dbeaver에 MySQL을 연결하면 문제 없이 잘 되는 걸 확인할 수 있다!
