만쥬의 개발일기
article thumbnail

오랜만에 WSL2로 MySQL 서버에 접속하려다가 , 그만 root 암호를 잊어버리는 사태에 직면했다.

이후 비밀번호 재설정을 하고, 여러가지 설정들을 건드리다가

2002번 에러를 직면했다. 소켓에 연결이 안되는 경우 서버 설정에 문제가 있는 경우가 많다고 들어서 

아예 재설치를 해주었다.

그러자 이번엔, ERROR 1698 (28000): Access denied for user 'root'@'localhost' 라는 에러를 만나게 되었고..

여러가지 해결 방법을 시도해보았다.

1. MySQL을 보안 기능 비활성화로 재시작  

먼저 첫번째로 'sudo mysqld_safe --skip-grant-tables &' 커맨드를 사용해 보안 기능을 끄고 재시작을 해주었다.

이후 

mysql -u root

위 커맨드로 접속시 비밀번호를 입력하지 않고 접속이 가능한데, 이 상태에서 root의 비밀번호를 변경해주었다.

FLUSH PRIVILEGES;

위 쿼리로 변경 사항을 저장하고, mysql을 재시작해주었다.

하지만 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 에러는 여전히 발생했고 다른 방법을 찾아보았다.

2. 관리자 권한으로 접속

이번엔 보안 기능을 비활성화 하지 않고, sudo를 붙여 관리자 권한으로 접속해보았다.

보안 기능을 끌 경우 MySQL 서버에서 여러가지 환경 설정이 막히기 때문에, 해당 방법을 선택했다.

접속 후 

SELECT User, Host, plugin FROM mysql.user;

쿼리로 사용자별 auth plugin을 조회해보니, root 사용자만 auth_socket 인증 방식을 사용하고 있었다.

알고보니, auth_socket 인증 방식을 사용할 경우 관리자 권한으로만 root 계정으로 접근이 가능한 것이었다.

항상 sudo를 붙여 root 계정으로 접근하는건 번거로우니 , 이를 mysql_native_password로 수정해주기로 했다.

 UPDATE user SET plugin='mysql_native_password' WHERE User='root';

위 쿼리를 입력하여, root 계정의 auth plugin 변경해주었다.

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

그리고 root의 password도 위 쿼리로 다시 설정해주었다.

 FLUSH PRIVILEGES;

다시 변경사항을 저장하고, MySQL 서버를 재시작하였다.

관리자 권한 없이도 root 계정으로 잘 접속되는 모습이다.

 

항상 비밀번호는 꼭 잘 저장해놓자!!

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!