유랑하는 나그네의 갱생 기록

だけど素敵な明日を願っている -HANABI, Mr.children-

Computer Science/Database

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

Madirony 2019. 8. 2. 16:44
728x90

오랜만에 mysql 접속을 하려니까 갑자기 접근이 안 되는 에러가 발생했습니다.

Ubuntu환경에서는 mysql이 default로 UNIX auth_socket plugin 을 사용한다고 합니다.

 

mysql ERROR 1698 (28000) 문제를 해결하려면 2가지 방법이 있어요.

 

1. root user의 plugin을 mysql_native_password로 수정한다.

2. system_user를 새로 만든다. (권장)

 

전 귀찮아서 1번으로 박아놨는데 나중에 수정해야 할 것 같습니다.

 

 

plugin 수정하기

 

sudo를 사용해서 mysql에 들어간 다음,

mysql root의 plugin의 auth_socket을 수정해주면 됩니다.

$ sudo mysql -u root
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User             | plugin                |
+------------------+-----------------------+
| root             | auth_socket           |
| mysql.sys        | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

 

실행 예제

 

$ sudo mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
$ service mysql restart

 

실행 예제

plugin을 수정해주고 mysql을 재시작합니다.

 

 

이제 mysql -u root -p 명령어를 실행하면 mysql에 접속을 할 수 있습니다.

 

SYSTEM_USER 새로 만들기

$ sudo mysql -u root
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

만약 SYSTEM_USER를 만들었을 경우엔 SYSTEM_USER 이름으로 접속을 해야 합니다.

 

mysql -u YOUR_SYSTEM_USER

 

 

참고 사이트 : stackoverflow

 

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

So... I'm setting up a new server and keep running into this problem. When I try to login to the MySQL database with the root user, I get the "ERROR 1698 (28000): Access denied for user 'root'@'

stackoverflow.com

 

728x90