Docker에서 시작한 Lumen(Laravel) + mysql로 ​​마이그레이션을 하면 SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 에러가 발생한다

Lumen과 Mysql을 만져서 조금은 빠져서 비망록으로 남겨 둔다.

참고 사이트



【Laravel】MySQL 8에서 migration시에 에러가 나왔을 때의 대처 방법
htps : // 타카키 씨. 코 m / ぁらゔぇl - mysql - 8-mi g 라치 온 - 에로 r 훗 x /

상황



Docker에서 시작한 Lumen(Laravel) + MySQL로 Lumen 컨테이너에 들어가기
다음 명령 입력

Lumen_cmd
php artisan migrate

그 후, 다음과 같이 에러가 발생한다.


Docker 코드 (MySQL)



MySQL Dockerfile 코드는 다음과 같습니다

Dockerfile
FROM mysql:8.0.16

MySQL 부분의 docker-compose.yml 코드는 다음과 같습니다.

docker-compose.yml
mysql:
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: keijiban
      MYSQL_PASSWORD: root
      MYSQL_USER: user

Lumen의 .env 파일



.env 파일의 mysql 설정 부분은 다음과 같습니다.

.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=keijiban
DB_USERNAME=user
DB_PASSWORD=root

조사한 결과



분명히 MySQL8에서는 사용자 작성시의 인증 방식의 디폴트가 caching_sha2_password가 되어 있는 것이 원인

MySQL을 살펴보기



우선 Mysql 컨테이너에 들어가 Mysql에 로그인,
이번에는 사용자 이름과 인증 플러그인을 알 수 있으므로 다음 명령을 입력하십시오.

MySQL_cmd
select user, plugin from mysql.user;

그러면 다음과 같이 출력되어 user 부분이 caching_sha2_password인 것을 알 수 있다.


MySQL 변경



그 후, 확인이 완료되면 caching_sha2_password의 인증 방식을 변경한다.
변경하려면 다음 명령을 입력

MySQL_cmd
alter user 'user' identified with mysql_native_password by 'pass';

※ 이번에 .env 파일에서 DB_USERNAME = user, DB_PASSWORD = root로 지정하고 있으므로 'user'부분은 user, 'pass'부분은 root로 변경 (이 부분은 지정하고 있음에 따라)

명령을 입력한 후 다시 사용자 이름과 인증 플러그인을 확인해 보면

이와 같이 caching_sha2_password에서 mysql_native_password로 바뀌고 있는 것을 확인할 수 있다.

Lumen에서 다시 php artisan migrate를 해 보자.



MySQL 인증 플러그인 변경이 끝나면 MyAQL 컨테이너에서 빠져 Lumen 컨테이너로 들어가 다시

Lume_cmd
php artitisan migrate

입력,

따라서 마이그레이션이 성공합니다.

좋은 웹페이지 즐겨찾기