👾 Trouble Shooting

[MySQL] Access denied for user '유저아이디'@'localhost' (using password: YES) 에러 해결방법

오늘 ONEUL 2022. 5. 27. 04:34

와 정말 말도 안 되는 삽질 끝에.. 에러를 해결했다..!!

 


 

문제 상황

[OS는 Windows10, MySQL은 8.0.29]

 

처음으로 MySQL을 설치하고, 이클립스에서 데이터베이스 연결을 하려는데

어우 눈아파

Access denied for user '유저아이디'@'localhost' (using password: YES)

에러가 날 반기네?😊 바로 구글링에 들어갔다.

유저의 접근이 거부된다구욧? 검색해보면 아주 다양한 해결 방법들이 나온다.

일단 내 문제 상황의 경우 조금 특별했던 점은,

다른 서버 데이터베이스에는 접속이 되는데 로컬 접속이 안된다는 것이었다.

도대체 뭐가 문제인 거니... 차근차근 해결해보자고~

 

 

 

 

해결 방법

 

1. 해당 아이디와 비밀번호가 일치하는가?

네. 나는 작동한 모습을 확인했는데도 혹시나 하는 마음에 유저를 삭제하고 다시 생성해봤지만.. 그 문제는 아니었다.

 

 

2. 권한 설정을 해주었는가?

네. 이 부분도 몇 번이나 재설정을 했는지 모르겠다^^

구글에 검색하면 가장 많이 나오는 답들이다. 대부분 이 정도 선에서 해결되는 듯하다.

1번과 2번의 해결 방법은 다음과 같다.

 

먼저 기존에 등록되어 있던 유저를 삭제하기 위해 root 계정으로 접속한다. (root 계정에 password를 설정했다면 p뒤로 입력)

> mysql -uroot -p

 

mysql에 접근해서 유저 목록을 조회한다.

mysql> use mysql
Database changed
mysql> select user, host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| javauser         | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.01 sec)

첫 번째의 javauser가 내가 기존에 생성했던 계정이다.

host가 localhost로 되어있기 때문에 이 부분을 변경해주고자 깔끔히 지우고 새로 생성해보겠다.

 

drop user로 유저를 삭제한다.

mysql> drop user 'javauser'@'localhost';
Query OK, 0 rows affected (0.03 sec)

 

자, 이제 다시 새로운 유저를 등록해보자.

mysql> create user 'javauser'@'%' identified by 'mysql';
Query OK, 0 rows affected (0.01 sec)

'javauser'는 user, 'mysql'은 password이다. 여기서 '%'는 모든 아이피 접속을 허용한다는 의미이다.

 

해당 유저에게 권한을 부여한다.

mysql> grant all privileges on javadb.* to 'javauser'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

 

모든 변경 사항을 적용시킨다.

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

이러면 완료! 현재 접속되어 있는 root 계정에서 exit 하고

새롭게 만든 계정으로 접속하여 계정 생성이 잘 되었는지 확인해보자.

 

mysql> exit
Bye
C:\WINDOWS\system32>mysql -ujavauser -pmysql
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 8.0.29 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

이렇게 잘 나오면 성공이다.

다시 이클립스로 돌아가 코드를 실행해보지만? 여전히 에러^^

 

 

3. 방화벽의 문제인가?

또 혹시나 하는 마음에 백신 프로그램도 꺼보고, 방화벽도 다 꺼봤지만 여전히 문제는 해결되지 않았다.

공유기 환경을 외부 환경으로 인식하고 포트가 차단되어 있는 걸까? 하는 마음에 방화벽 포트 설정도 해주었다.

 

인바운드 새 규칙 설정 포트 3306

인바운드 규칙에 새 규칙을 생성하고 포트를 3306으로 설정해준다. (3306은 My SQL 기본 포트이다.)

자세한 방법은 여기서 확인 → MySQL 인바운드 허용하기 - 외부로부터의 접속 포트 허용하기

 

이제 MySQL의 포트 번호를 확인해보자.

mysql> show global variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set, 1 warning (0.03 sec)

잘 나오는군. 다시 이클립스로 가서 확인해보면?

아직도 에러^^

 

 

4. 포트의 문제인가?

이쯤에서 나는 답답함에 미쳐버리는 줄 알았다.

나 왜 네트워크 몰라?ㅎ

후.. 진정하고, 포트를 확인해보자.

 

cmd 창에서 netstat 명령어를 입력하면 네트워크 관련 정보를 확인할 수 있다.

>netstat -ano

TCP 프로토콜의 3306 주소를 쓰는 저 친구의 PID를 잘 기억해둔다.

이후 리소스 모니터로 확인하다. 자세한 방법은 여기서 확인 → MySQL 설치 3306 Port 오류

동일한 PID를 찾아보는데 여기서 조금 이상한 점을 발견했다.

수신 대기 포트에 뜨는 mysqld.exe가 3개나 있다고..? 그것도 한 녀석은 너무 수상하게 다른 PID를 갖고 있었다.

뭔가 해결의 조짐이 보이기 시작할 때 결정적으로 나를 구해준 아주 고마운 글을 발견했다.

 

Access denied for user 'root'@'localhost' (using password: YES)

JDBC 프로그래밍을 할 때 아래와 같은 오류를 만나본 사람이 꽤 많을 것이다. java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 여기서야 검은색 글씨로 써져 있으니 괜..

kimtaehyun98.tistory.com

 

이때 스치는 나의 기억..

잠만 나도 전에 MySQL 설치한 적 있었나?

맞다. 전에 생활코딩 강의를 들으면서 Apache를 설치하고자 Bitnami WAMP 스택을 설치한 적이 있었다!!!

그땐 SQL이 뭔지도 몰랐을 때라 아주 새까맣게 잊고 있었다. 세상에.

글에 나온 방법대로 작업 관리자를 열어 mysqld 중 bitmami가 적혀있는 것을 중지하고,

Stop Bitnami WAMP Stack service

이 친구를 실행시켜 모든 서비스를 중지시켰다.

기대에 부푼 마음으로 이클립스를 실행해본 결과?!

아무 문제없이 돌아갔다!!!! 해결!!!!

이때 눈물 찔끔 흘렸다😂

 

 

 

 

정확하게 어떤 부분이 문제를 일으킨 건지 잘은 모르겠지만,

아마도 기존에 설치되어있던 MySQL과 충돌이 있었던 듯싶다.

그렇게 찾아 헤매던 에러는 결국 내가 만들어낸 에러였다^^

덕분에 cmd창과 좀 친해진 기분이 드는 것 같기도 하고.. 엣헴

아무튼 나 같은 사람이 없길 바라며! 포스팅 끝!