*오류 해석
root 사용자가, localhost(즉, 같은 서버 내에서), 비밀번호를 입력했는데 접속 권한이 거부되었다는 뜻이다.
인증이 안 됐다는 말이다. 그런데 단순 비밀번호 문제만은 아닐 수 있다.
DBeaver에 오랜만에 들어갔더니 다음과 같은 오류가 떴다. 이전에도 해당 오류가 생겼던 적이 있는데 어떻게 해결했었는지 대충만 기억이 나서 이참에 블로그에 고정시켜두려 한다.
지난번에 cmd 관리자 모드에서 PID를 삭제했었던 것으로 기억한다. 그리고 service.msc에서 mysql 실행 어쩌구를 했었던 것 같은데...기억을 더듬으며 해결해보자.
1. 윈도우 창에 'cmd'를 검색한 후 '관리자 권한으로 실행'하기를 눌러준다.
2. 현재 활성 연결을 확인할 수 있는 'netstat -ano' 명령어를 입력한다.
기본적으로 mysql의 포트번호는 3306이다.
가장 첫 번째 열 중에서 끝 자리가 3306인 로컬 주소를 찾는다. 그리고 해당 로컬 주소의 PID를 찾는다. 맨 끝 열이 PID다.나의 경우는 2864이 mysql이 사용하고 있는 로컬 주소의 PID이다.
3. 'taskkill /f /pid 2864' 명령어를 입력한다.
그럼 이런 메시지가 cmd 창에 뜬다.
그 다음에는 윈도우 키 + R을 눌러 service.msc를 검색해준다.
4. 'MySQL80' 우클릭 후 시작을 선택한다.
5. DBeaver로 다시 들어가 Connections로 가보면 해결
사실 cmd창에서 프로세스를 종료하기 전에 먼저 service.msc에서 mysql을 시작해보려 했는데 이미 종료되어 있기도 했고 서비스를 다시 시작할 수 없다는 식의 메시지가 떠서 순서를 cmd → service.msc로 해보았더니 매끈하게 해결되었다.
처음으로 검색도 그 누구의 도움도 없이 혼자 해결한 오류다. 이 쾌감...맛있다.
두 번씩 동일한 오류를 겪고나니 원인이 정말로 궁금해진다. 검색해보면 비밀번호가 틀려 생기는 인증 오류 원인이라고 하는데 사실 한 번 로그인 해놓으면 비밀번호를 다시 입력할 일이 별로 없기 때문에 잘 이해가 가지는 않았다.
그런데 프로세스를 강제 종료하고 service.msc에서 다시 mysql 서비스를 실행하니 되었다는 것은, 포트 충돌이 가장 큰 원인으로 보여진다. 내 사견이긴 하다만, 이전에 사용하던 서버가 제대로 종료되지 않은 상태로 다시 새롭게(?) 서비스를 실행하려고 해서는 아닐까? 여기서 네트워크 공부가 부실한 게 느껴진다😅
무튼 해결되었으니 다시 할 일을 하러 총총
+ 내용 추가
왜 이 방식으로 해결될까?
1. DBMS가 이미 실행 중이거나, 충돌된 상태일 수 있다.
포트를 사용하는 DBMS 프로세스가 비정상적이거나 중복 실행 중일 수 있다.
예를 들어,
- 서버가 중간에 강제 종료됨
- 포트 번호에 DBMS가 두 번 올라감
- 잠긴 상태의 접속 세션이 남아있음
그래서 포트를 kill 하게 되면, DBMS를 점유하고 있던 비정상적인 프로세스를 강제로 종료하고 포트를 다시 깨끗하게 비운다.
2. service.msc에서 DBMS를 재시작하면 초기화 효과
서비스 재시작은 DBMS 엔진을 정상적으로 다시 올려서 인증 설정, 사용자 테이블, 포트 바인딩 등을 초기화 상태로 복원한다.
DB가 깨끗하게 시작되면서 root 권한도 정상적으로 작동할 가능성이 커지는 것이다.
다만, 근본적인 해결을 위해 다음과 같은 사항을 먼저 점검하도록 한다:
1. root 계정 비밀번호가 정확한지
2. dbms명.user 테이블에 root@localhost 권한이 제대로 있는지
3. my.cnf 혹은 my.ini 설정에 skip-grant-tables가 꺼져 있는지
4. DB 포트가 제대로 열려 있는지
필요하면 비밀번호 재설정이나 사용자 권한 수정도 해야 할 수 있다.
'Error' 카테고리의 다른 글
[Error] 이클립스 깃허브 연동 오류 해결(야매) (0) | 2024.07.18 |
---|---|
[Error] Spring 회원정보 수정 시 아이디 중복 추가됨 (0) | 2024.04.02 |
[Error 스프링] Junit 테스트 시 java.lang.NoClassDefFoundError 오류 해결 (0) | 2024.03.07 |
[Error 스프링] JSON parse error: Unrecognized token (0) | 2024.03.06 |