아마존에서 EC2라는 서버 한 대를 빌려서 홈페이지용 DB를 만들어보는 공부를 하고 있었는데,
서버 연결이 잘 안됐다.
driver properties에서 public key Retrieval 옵션을 false 에서 true로 변경하고 실행하기
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.
일반접속말고 ssh 접속도 시도해보고, 로컬호스트 주소가 아닌 프라이빗 주소도 넣어보고(이건 아니었음)
하다가 이런 에러메시지가 나왔다.
Access denied for user ‘00’ @ ‘00’ (using password:YES)
해당 유저에게는 열려있지 않다는 것으로 sql서버로 접속 후 다음과 같은 코드들을 실행
sudo mysql -u root -p
select user, host, plugin from user; #(플러그인체크)
#결과 확인, 플러그인 체크
root 계정의 플러그인이 비밀번호가 아니라 mysql_native_password 이 아닌,
caching_sha2_password로 되어있어서 비밀번호가 없었음에도 sql 접속이 막혀있었다고 판단,
USE mysql;
update user set plugin='mysql_native_password' where user='root';
플러그인을 다시 패스워드로 바꿔주었다.
이후에도 똑같은 에러가 나와서 이번에는 권한도 제대로 부여했다.
grant all privileges on *.* to '아이디'@'localhost';
#특정 사용자에게 전 권한 부여
grant all privileges on DB명.* to '아이디'@'localhost';
#특정 사용자에게 특정 DB접근권한 부여
FLUSH PRIVILEGES;
(재시동)
비밀번호가 없어도 접속 에러가 날 수 있다기에 재설정도 했다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234원하는비밀번호';
EC2 가상환경과 내 IP주소가 다름을 인지하고,
EC2내 IP(로컬호스트)에서만 접속을 허용하고 있지 않는지 체크할 필요가 있었다.
한마디로 로컬 호스트로 연결허용 계정을 사용하면 안되는 것이었다...
(막상 연결하고자 하는 디비버는 가상 컴퓨터 바깥에 있었다.)
select user, host, plugin from user; #호스트 재확인
create user '계정명'@'%' identified by 'password'; #'%' 모든 IP 접근 가능 호스트 생성
grant all privileges on *.* to '계정명'@'%'; #권한부여
flush privileges; #재시작
내가 겪은 케이스를 정리하고, 해법을 구글링해서 정리해본 거라 100% 확신은 못하지만,
이런 에러 메시지를 확인 -> 이렇게 방법을 찾아서 해결해서 되었다고 참고해주시면 좋을 듯하다.
개인적으로 마지막 호스트의 경우 정말 내가 멍청해서 다른 모든 에러방법을 찾아내고 난 뒤에 찾아본 거라,
그것만 해결했어도 연결이 되었을지도 모르겠다ㅠㅠㅠㅠ (먼저 체크해보시길 바란다.)