[MYSQL] Access denied for user ~ (using password YES)

1 분 소요

해당 블로그는 개인이 공부하고, 정리한 걸 기록하는 공간입니다.
오타, 오류가 존재할 수 있습니다. 댓글을 달아주시면 수정할 수 있도록 하겠습니다.

해결 방법

mysql 의 데이터베이스 mysql 로 들어가서 User 테이블의 정보를 확인 해 본다.
User 컬럼의 localhost 와 % 의 비밀 번호 정보가 다르게 입력 되어 있을 수 있다.

다를 경우

update user set Password=Password('[비밀 번호]') where User='[아이디]' and Host='%';  
  
commit;  
  
FLUSH PRIVILEGES;  

이런 식으로 재등록 해준다.

update 하고 commit을 해주지 않으면 변경사항이 저장되지 않는다!

FLUSH PRIVILEGES

보통은 INSERT, DELETE, UPDATE를 통해 사용자를 추가, 삭제, 권한 변경 등을 수행하였을 때 이 변경 사항을 반영하기 위하여 사용한다. 이 떄 FLUSH PRIVILEGES는 grant 테이블을 reload함으로서 변경 사항을 즉시 반영하도록 한다.

그런데 만약 INSERT, DELETE, UPDATE와 같은 SQL문을 사용하지 않고 바로 grant 명령어를 사용하여 작업하였다면 FLUSH PRIVILEGES를 실행할 필요가 없어진다.

FLUSH PRIVILEGES는 굉장히 성능에 영향을 준다. 특히 습관적으로 FLUSH PRIVILEGES를 사용하는 경우가 있는데(모든 명령 이후에 사용하는 경우도 있다) 이는 엄청난 부하가 된다.

단, localhost에서 접속하는 경우 %가 아닌 localhost로 Host 컬럼에 저장되어있어야 한다.
user table을 확인해보고, 내가 현재 로컬에서 접속하는데 %로 저장되어있다면 위의 쿼리문을 응용해서
% → localhost로 변경한 뒤에 접속하길 바란다.

mysql를 잘 몰라서 나도 계속 접속이 안되었다.
외부에서 접속이 필요한 경우 해당 사용자 아이디를 host name만 다르게 추가하면 됩니다.

Reference

댓글남기기