카테고리:

4 분 소요

문제 상황

기존에 있던 시스템에 MariaDB를 세팅하여 제작해두었던 프로젝트를 실행하려고 하니 아래와 같은 오류를 출력하였다.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

문제 확인

MariaDB는 복잡한 시스템이라, 해결하기 이전에 문제가 정확히 무엇인지 확인하는 과정이 중요하다.

Root 권한으로 접속해보기

처음해야할 것은 Root 권한으로 터미널에서 접속해보는 것이다.

mysql -uroot -p

여기서 접속조차 안된다면 무언가 단단히 잘못된 것이다. 재설치하는 것이 정신에 이롭다.

MariaDB 계정 확인하기

MariaDB에 등록된 계정을 확인하는 방법은 간단하다. 아래의 SQL문을 실행하면 된다.

use mysql;
select host, user, password, plugin from user;

Plugin 문제

외부에서 접속하려면 plugin 부분이 mysql_native_password로 되어있어야 한다. 설치과정에서 Switch to unix_socket authentication옵션에 Y를 선택한 경우 plugin이 auth_socket이나, unix_socket이 되어 외부에서 접속하지 못한다.

이를 해결하기 위해서는 해당 부분을 mysql_native_password로 바꾸어야 하는데, 아래의 SQL문을 사용하여 변경한다.

alter user 'root'@'localhost' identified via mysql_native_password using password("root");	
flush privileges;

비밀번호 문제

일부 프로젝트에서 MariaDB에 접속할 때 Root 비밀번호를 없애야 하는 경우가 있다. 비밀번호를 없애는 방법은 아래의 SQL문과 같다.

alter user 'root'@'localhost' identified by '';
flush privileges;

MariaDB 계정 권한 확인하기

MariaDB에 등록된 계정의 권한을 확인하는 방법은 간단하다. 아래의 SQL문을 실행하면 된다.

 show grants for 'root'@'localhost';

보통 ‘root’@’localhost’ 계정의 경우에는 아래와 같은 권한을 가지게 되는데, 모종의 이유로 권한이 사라지거나 이상할 수 있다.

GRANT ALL PRIVILEGES ON . TO ‘root’@’localhost’ WITH GRANT OPTION

GRANT PROXY ON ‘’@’%’ TO ‘root’@’localhost’ WITH GRANT OPTION

권한이 위와 다르다면 재설치하는 것이 정신 건강에 이롭다.

MariaDB 재설치하기

패키지 삭제

yum remove mariadb mariadb-server mariadb-libs

로컬 데이터 삭제

로컬 데이터를 삭제하지 않으면 MariaDB를 재설치했을 때 이전의 계정 데이터나 테이블이 남아있어 문제가 해결되지 않는다.

rm -rf /var/lib/mysql
rm /etc/my.cnf

패키지 재설치

yum install mariadb-server
mariadb-secure-installation

Enter current password for root (enter for none): → 엔터

Switch to unix_socket authentication [Y/n] → n

Set root password? [Y/n] → Y 이후 사용할 암호 입력

Remove anonymous users? [Y/n] → Y

Disallow root login remotely? [Y/n] → n

Remove test database and access to it? [Y/n] → Y

Reload privilege tables now? [Y/n] → Y

접속 테스트

mysql -uroot -p

태그: auth_socket, ERROR, localhost, MariaDB, mysql, mysql_native_password, plugin, PRIVILEGES, Root, SQL, unix_socket, yum, 권한, 비밀번호, 재설치

업데이트: