Back-End/Back-End 자료실

[Laravel] MySQL 8.0 이상 인증 오류 해결

Chipmunks 2018. 9. 25.
728x90



PHP Laravel 프레임워크 기능을 익혀가던 중 난관에 부딪혔다. 며칠째 해결이 되지 않아서 잠깐 던졌었는데, 오늘에서야 해결했다.


문제 상황은 Laravel 프레임워크에서의 MySQL 접속 오류다.

Laravel 이 제공하는 REPL(Read-Evaluate-Print-Loop) 도구인, tinker 를 이용하여 MySQL 8.0.12 계정에 접속하였다. 그러더니 다음과 같은 오류가 발생했다.


 ~/Documents/Workspace/PHP/myapp2 > php artisan tinker

Psy Shell v0.9.8 (PHP 7.1.16 — cli) by Justin Hileman

>>> DB::select("SELECT * from posts");

Illuminate/Database/QueryException with message 'SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: SELECT * from posts)'


.env 환경파일에서의 설정도 올발랐다. MySQL 설정, PHP 또는 프레임워크의 버전 문제도 문제가 없었다. 최후에 방법으로 모두 재설치를 해보아도 해결이 되지 않았다.


구글링 결과 MySQL 8.0.4 이상부터 계정 인증 방식이 이전 버전과 다르다는 사실을 알아냈다.[각주:1]

MySQL에 접속하여 다음과 같은 명령어로, 이전 버전의 방식으로 바꿀 수 있다.


1
ALTER USER '계정아이디' IDENTIFIED WITH mysql_native_password BY '계정비밀번호';
cs


MySQL 서비스를 재실행한 다음, tinker 도구도 재실행했더니 정상 결과가 나온다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
~/Documents/Workspace/PHP/myapp2 > mysql -uroot -p
 
mysql> ALTER USER 'homestead' IDENTIFIED WITH mysql_native_password BY 'secret';
Query OK, 0 rows affected (0.08 sec)
 
mysql> quit;
Bye
 
 ~/Documents/Workspace/PHP/myapp2 > brew services restart mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)
 
 ~/Documents/Workspace/PHP/myapp2 > php artisan tinker
Psy Shell v0.9.8 (PHP 7.1.16 — cli) by Justin Hileman
>>> DB::select("SELECT * from posts");
=> []
cs


이제 다음 진도를 나갈 수 있게 됐다!




  1. https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-4.html [본문으로]

댓글