맥OS M1 오류 코드 `28000`과 메시지 `Access denied for user 'root'@'localhost' (using password: YES)` 데이터베이스 연결에러 해결하기

박두팔이·2023년 11월 9일
0

데이터베이스

목록 보기
2/5
  • 시스템환경: macOS M1
  • brew를 통해 mysql 설치
mysql -u root -p

명령어를 입력하니 아래의 사진과 같은 에러가 발생했다.

에러상황

mysql에서 옳은 비밀번호를 입력했음에도 불구하고 아래의 에러코드가 떴다. mysql 비밀번호 맞는데 되지 않는 상황이다🥲

(28000): Access denied for user ‘root’@‘localhost’ (using password: YES)


오류 설명

Spring Boot 애플리케이션 실행 실패 로그에 따르면, Flyway가 초기화하는 과정에서 데이터베이스 연결을 얻는 데 실패했다는 것을 알 수 있다. 오류 코드 28000과 메시지 Access denied for user 'root'@'localhost' (using password: YES)는 데이터베이스에 로그인하는 과정에서 사용자 이름이나 비밀번호가 정확하지 않다는 것을 나타낸다.

보통 비밀번호를 입력했을 때, 비밀번호가 틀렸다면 using password: YES가 뜨고 입력하지 않았다면 NO로 나온다고한다.

보편적인 해결 방법

  1. 데이터베이스 접속 정보 확인: application.properties 또는 application.yml 파일에서 데이터베이스 URL, 사용자 이름, 비밀번호가 정확한지 확인한다.
  2. 데이터베이스 사용자 권한 확인: 데이터베이스에서 'root' 사용자가 충분한 권한을 가지고 있는지, 그리고 'localhost'에서의 접근이 허용되어 있는지 확인한다.
  3. 비밀번호 재설정: 데이터베이스의 'root' 사용자 비밀번호가 올바르지 않다면, 비밀번호를 재설정하거나 올바른 비밀번호를 사용하여 설정 파일을 업데이트한다.
  4. Flyway 설정 검토: Flyway 관련 설정이 올바르게 구성되어 있는지 확인한다.
  5. 네트워크 설정 확인: 로컬 네트워크 설정이나 방화벽 설정이 데이터베이스 접근을 막고 있지는 않은지 확인한다.

mysql와 관련된 모든 파일을 삭제한 뒤, brew를 통해 재설치하기

비밀번호를 재설정 하기 위해 mysql -u root 로 mysql에 접속하려고 시도하였지만 이 명령어 조차 에러를 뱉어내서 mysql을 아예 밀어버리고 재설치하기로 했다.

1. mysql 중지

brew services stop mysql

2. Brew를 통한 mysql패키지 제거

brew uninstall

3. 시스템에 남아있는 mysql 프로세스 확인

ps aux | grep mysql

이 명령어의 출력에서 grep mysql을 제외하고 다른 MySQL 관련 프로세스가 나타나지 않아야 한다. 그래도 나타난다면, 해당 프로세스의 PID(프로세스 ID)를 사용하여 강제로 종료할 수 있다:

4. mysql 프로세스 강제 종료

sudo kill -9 [PID]

여기서 [PID]는 종료하려는 프로세스의 ID 번호를 의미한다. 예를 들어, 82364라는 PID를 가진 프로세스를 종료하고자 한다면, sudo kill -9 82364 명령어를 사용한다.

모든 제거 과정을 마치고 나면, brew list, ps aux, find 명령어들을 사용하여 MySQL이 완전히 제거되었는지 최종적으로 확인.

MySQL 프로세스가 grep mysql 명령을 제외하고 나타나지 않고 있다. 이는 MySQL 서버 프로세스(mysqld)가 더 이상 실행되고 있지 않음을 의미한다. 그러므로 MySQL 관련 프로세스는 성공적으로 종료된 것이다.

5. mysql 데이터 및 설정 파일 삭제

sudo rm -rf /opt/homebrew/var/mysql
sudo rm /opt/homebrew/etc/my.cnf
sudo rm -rf /opt/homebrew/etc/my.cnf.d
sudo rm -rf /opt/homebrew/Cellar/mysql

6. 추가적인 MySQL 관련 파일 검색 및 삭제

sudo find / -name 'mysql' -exec rm -rf {} +

🚨 주의사항 🚨

  • find 명령어를 사용하여 시스템 전체에서 'mysql'이 포함된 파일을 검색하고 삭제하는 것은 매우 위험할 수 있다.
  • 이 명령어는 MySQL과 관련된 모든 파일을 찾아서 삭제하게 되는데, 실수로 중요한 파일이나 시스템 파일을 삭제할 수 있으므로, 매우 조심해야한다.
  • find 명령어를 사용하기 전에 항상 어떤 파일들이 영향을 받는지 확인해야한다.

7. mysql 재설치

brew install mysql

mysql 성공적으로 설치되었면 다음단계로 넘어가자.

8. mysql 실행

brew services start mysql

9. mysql 보안 설치 스크립트 실행

mysql_secure_installation

이 스크립트는 MySQL을 보다 안전하게 만들기 위한 여러 단계를 안내해준다. 초기 비밀번호 설정, 익명 사용자 삭제, 원격 루트 로그인 비활성화 등의 과정을 진행할 것임.

10. 비밀번호 설정

  • y or Y: 비밀번호 검증 기능을 활성화하고 비밀번호 강도 정책을 설정하라는 의미이다. 비밀번호를 설정할거라면 y of Y를 입력, 비밀번호 검증 기능을 활성화하지 않기를 원한다면, 그냥 Enter 키를 누른다.

11. 비밀번호 유효성 검사 정책 수준 결정하기

  • LOW: 비밀번호의 길이가 8자 이상이어야 합니다.
  • MEDIUM: 비밀번호의 길이가 8자 이상이며, 숫자, 대소문자가 섞인 문자, 그리고 특수 문자를 포함해야 합니다.
  • STRONG: 비밀번호의 길이가 8자 이상이며, 숫자, 대소문자가 섞인 문자, 특수 문자를 포함하고 사전 파일에 없는 단어를 사용해야 합니다.
    원하는 비밀번호 정책 수준에 맞는 숫자를 입력하세요:

0 입력: LOW 수준을 선택합니다.
1 입력: MEDIUM 수준을 선택합니다.
2 입력: STRONG 수준을 선택합니다.

숫자를 입력하면 Estimated strength of the password: 50 라는 문장이 등장하는데, 비밀번호의 강도는 50으로 추정된다는 것이다. 제공된 비밀번호로 계속 진행하려면 'y' 또는 'Y'를 누르고, 그렇지 않으면 다른 키를 누르면된다.

12. 익명 사용자제거하기

익명 사용자는 누구나 사용자 계정을 만들 필요 없이 MySQL에 로그인할 수 있게 해주는 기능으로, 주로 테스트 목적이나 설치 과정을 조금 더 쉽게 하기 위해 제공된다.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : 

익명 사용자를 제거하시겠습니까? (예를 원하면 'y' 또는 'Y'를, 아니면 다른 키를 누르십시오)

13. 데이터베이스와 그에 대한 접근 권한설정

테스트 데이터베이스(Test Database)란?
데이터베이스는 'test'라고 불리며, 어떤 사용자든지 접근할 수 있도록 기본 설정되어 있다. 이 역시 테스트 목적으로 제공되며, 보안을 위해 실제 운영 환경에서는 제거하는 것이 좋다.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 

테스트 데이터베이스와 그에 대한 접근 권한을 제거하시겠습니까? (예를 원하면 'y' 또는 'Y'를, 아니면 다른 키를 누르십시오):

14.

mysql_secure_installation 스크립트가 변경 사항을 적용하기 위해 권한 테이블을 새로고침(reload) 할 것인지를 묻고 있다.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : 
  • 이 과정은 앞서 수행한 설정 변경사항들, 예를 들어 익명 사용자 제거나 테스트 데이터베이스 삭제 같은 것들이 데이터베이스 시스템에 즉시 반영되도록 하기 위함이다.
  • 예를 들어, 권한을 새로고침하고 모든 변경사항을 즉시 적용하려면 y 또는 Y를 눌러야한다.

15. 드디어 mysql 접속 성공!!!!!!!!!!!!!!!


mysql 비밀번호를 맞게 설정했는데도 이런경우가 종종있다고 한다. 보통의 경우는 mysql --skip-grant-tables와 같은 명령어로 인증 없이 mysql에 진입하여

ALTER USER 'root'@'localhost' IDENTIFIED BY '새 비밀번호';

와 같은 명령어로 해결하는것 같으나, 나의경우 되지 않아서 아예 밀고 새로 다시했다.
이전에 설정했던 비밀번호와 다시 설치한 mysql의 비밀번호 설정의 유효성검증이달랐다.
환경설정 문제로 더이상 힘들고싶지 않다..ㅎ

남은공부나 마저 하러가야징🥲

profile
기억을 위한 기록 :>

0개의 댓글