Access denied for user 'root'@'localhost'
현재 청첩장 만들기 프로젝트에서 프론트엔드를 담당하고 있는데, 백엔드와 연결하려고 하면 내 데이터베이스가 계속 연결되지 않았다.
내가 구현한 API를 테스트하고 싶었지만, 내 노트북으로 할 수 없어서 다른 팀원에게 부탁해야 하는 번거로웠던 일이 있었다.
심지어 MariaDB를 삭제하고 다시 설치해도 해결되지 않았는데 다음 방법으로 해결할 수 있었다.
이 에러는 MariaDB의 인증 방식과 권한 문제일 가능성이 크다.
먼저 root 사용자의 권한을 확인하기 위해 관리자 권한으로 로그인해야 한다.
sudo mysql -u root -p
비밀번호 입력 후, 접속되면 다음 단계로 진행하면 된다
인증 방식을 기존 "auth_socket"에서 일반 패스워드 방식으로 변경할 수 있는데, '새로운비밀번호'
부분을 원하는 비밀번호로 변경하면 된다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호';
FLUSH PRIVILEGES;
exit
mysql -u root -p
필자는 이 방법으로 해결했지만, 여기서 해결이 되지 않는다면 다음 방법을 시도해봐야 한다.
만약 비밀번호를 잊었을 경우, 재설정 하는 방법도 있다.
먼저, MySQL을 중지시키고 비밀번호 없이 실행시킬 수 있도록 MySQL을 안전 모드로 실행한다.
sudo systemctl stop mysql
sudo mysqld_safe --skip-grant-tables --skip-networking &
새로운 터미널에서 MySQL에 접속해서 root 비밀번호를 다시 설정하면 된다.
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '새로운비밀번호';
FLUSH PRIVILEGES;
exit
다시 실행해서 로그인하기
sudo systemctl restart mysql
mysql -u root -p
MariaDB를 다시 설치하거나 설정이 초기화되더라도 다시 같은 문제가 발생하지 않도록 예방하는 방법을 추가하자
설정 파일에서 기본 인증 방식을 mysql_native_password로 설정하면, MariaDB 재설치 후에도 같은 문제가 발생하지 않는다.
설정 파일 수정
sudo nano /etc/mysql/my.cnf
파일을 열고 아래 내용을 추가해준다.
[mysqld]
default_authentication_plugin=mysql_native_password
MariaDB 재시작
sudo systemctl restart mariadb
같은 문제가 발생한다면 참고하러 다시 오겠습니다. 좋은 정보 감사합니다!