와 정말 말도 안 되는 삽질 끝에.. 에러를 해결했다..!!
문제 상황
[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은 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를 갖고 있었다.
뭔가 해결의 조짐이 보이기 시작할 때 결정적으로 나를 구해준 아주 고마운 글을 발견했다.
이때 스치는 나의 기억..
잠만 나도 전에 MySQL 설치한 적 있었나?
맞다. 전에 생활코딩 강의를 들으면서 Apache를 설치하고자 Bitnami WAMP 스택을 설치한 적이 있었다!!!
그땐 SQL이 뭔지도 몰랐을 때라 아주 새까맣게 잊고 있었다. 세상에.
글에 나온 방법대로 작업 관리자를 열어 mysqld 중 bitmami가 적혀있는 것을 중지하고,
이 친구를 실행시켜 모든 서비스를 중지시켰다.
기대에 부푼 마음으로 이클립스를 실행해본 결과?!
아무 문제없이 돌아갔다!!!! 해결!!!!
이때 눈물 찔끔 흘렸다😂
정확하게 어떤 부분이 문제를 일으킨 건지 잘은 모르겠지만,
아마도 기존에 설치되어있던 MySQL과 충돌이 있었던 듯싶다.
그렇게 찾아 헤매던 에러는 결국 내가 만들어낸 에러였다^^
덕분에 cmd창과 좀 친해진 기분이 드는 것 같기도 하고.. 엣헴
아무튼 나 같은 사람이 없길 바라며! 포스팅 끝!
'👾 Trouble Shooting' 카테고리의 다른 글
[Spring] 스프링 Security 한글 깨짐 해결 방법 (0) | 2022.07.29 |
---|---|
[OS] Window10(윈도우 10) 비정상적인 메모리 사용량 해결 방법 (0) | 2022.06.18 |