Spring Boot 프로젝트를 로컬에서 Jar로 변환 후 $ scp~
명령어로 EC2 로 복사하고 Jar 파일 실행했는데, 제목의 Error 메세지가 떴습니다.
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
저는 아래의 GPT 답변 내용을 다 확인해도 해결이 안됐습니다.
발생 원인은 이렇습니다.(헤맨 이유)
로컬에서 Spring Boot 프로젝트로 만든 application.yml에 설정된 MySQL 아이디/비밀번호와 EC2에서의 MySQL 아이디/비밀번호가 달랐습니다.
그래서 로컬의 스프링부트 프로젝트에서 DB 연결 아이디/비밀번호를 EC2의 MySQL 아이디/비밀번호로 변경했습니다.
그 후 Jar를 로컬에서 EC2로 scp 명령어로 옮겼다고 생각했는데, 명령어가 틀렸다는 안내가 없어서 복사가 완료된 줄 알고 계속 다른 해결책만 찾고있었는데 알고보니 아래와 같이 안내 메세지 100%가 떠야 복사가 완료된거였습니다.
제대로 다시 Jar 파일을 복사하니 정상 실행 됐습니다.
EC2의 jar 파일을 $ rm {파일명}
명령어로 지우고 $ ls
로 확실히 지워진 것을 확인한 후에 정확하게 scp 명령어를 확인하여 100% 복사된 것을 확인 꼭 하시기 바랍니다.
MySQL 데이터베이스에 'root' 사용자가 있는지 확인하고 해당 사용자가 'localhost'에서 액세스할 수 있는지 확인하세요.
mysql -u root -p
SELECT user, host FROM mysql.user WHERE user = 'root';
mysql> create user 계정ID@'%' identified by '비밀번호';
mysql> grant all privileges on DB이름.* to 계정ID@'%';
mysql> flush privileges;
'root' 사용자의 비밀번호가 정확한지 확인하세요. 오류 메시지에서 "using password: YES"라는 부분은 사용자 비밀번호를 사용하고 있음을 나타냅니다.
MySQL 서버가 'localhost'에서 실행 중이고 해당 호스트에 연결할 수 있는지 확인하세요. 필요에 따라 호스트 이름이나 IP 주소를 수정하여 연결할 수 있습니다.
sudo service mysqld status
or sudo systemctl status mysqld
mysql -u root -p
SELECT @@hostname;
Spring Boot 애플리케이션의 데이터베이스 연결 구성을 확인하세요. application.properties 또는 application.yml 파일에서 데이터베이스 연결 정보를 올바르게 설정해야 합니다.
보안 그룹 설정 확인:
AWS 콘솔에서 EC2 대시보드로 이동합니다.
인스턴스 목록에서 어플리케이션 서버(EC2)를 선택합니다.
아래 탭에서 "보안 그룹"을 선택합니다.
해당 보안 그룹의 인바운드 규칙 중 MySQL 포트(기본적으로 3306)가 허용되어 있는지 확인합니다. 만약 허용되어 있지 않다면 새로운 규칙을 추가해야 합니다.
인바운드 규칙 추가:
보안 그룹 설정에서 MySQL 포트(기본적으로 3306)을 열어야 합니다.
규칙 추가 버튼을 클릭하고, 다음과 같은 정보를 입력합니다:
유형(Type): MySQL/Aurora
프로토콜(Protocol): TCP
포트 범위(Port Range): 3306
소스(Source): MySQL 서버가 있는 보안 그룹 또는 특정 IP 주소
MySQL 사용자 계정 및 권한 확인:
MySQL 서버에 로그인하여 MySQL 사용자 계정이 어플리케이션 서버(EC2)의 호스트에서 접속할 수 있는지 확인합니다.
필요한 경우, 사용자 계정의 호스트 부분을 '%'로 변경하여 모든 호스트에서의 접근을 허용할 수 있습니다.
MySQL 바인딩 주소 확인:
MySQL 서버의 바인딩 주소 설정을 확인하여 원격 접속이 허용되도록 설정되어 있는지 확인합니다.
AWS VPC 및 서브넷 설정 확인:
EC2 인스턴스와 MySQL 서버가 동일한 VPC에 속해 있는지 확인합니다.
서브넷 설정이 정상인지도 확인해야 합니다.