Nestjs + MySQL Docker 연동시 에러 해결
따라하면서 배우는 NestJS 를 보면서 게시판 로직을 구현 했다.
이 강의는 postgresDB를 사용했고, 나는 Docker에 MySQL를 올리고 사용하고 싶었기 때문에, 수정이 필요했다.
docker에 mysql 이미지를 설치하고 컨테이너를 실행.
MySQLWorkbench를 설치 후 db를 연결했다.
그리고 프로젝트 config폴더의 default.yaml파일에서 db의 정보들을 mysql에 맞게 바꾸고 야심차게 서버를 켜보았지만, 결과는 에러....
프로젝트 내부에 mysql 모듈을 설치하지 않아서 나오는 에러였다.
npm install mysql --save
다시 서버를 켜보았지만 또 다시 에러.. 절망 ^_ㅠ
ER_NOT_SUPPORTED_AUTH_MODE:
Client does not support authentication protocol requested by server;
consider upgrading MySQL client
현재 mysql이 기본 인증 플러그인으로 사용하고있는 'caching_sha2_password'를 nestjs에서 소화하지 못해서 생기는 오류였다.
이럴때는 클라이언트에서 사용할 수 있도록 인증 플러그인을 예전 방식인 'mysql_native_password'로 바꿔주거나, nestjs에서 mysql2플러그인을 사용하면 된다.
나는 'mysql_native_password'로 바꿔주는 방법을 택했다.
- 터미널을 켜고 docker의 mysql에 접속
$ docker exec -it [컨테이너명] /bin/bash
# mysql -u root -p
- mysql의 비밀번호 플러그인을 확인해보자(내가 사용중인 user가 'caching_sha2_password'이기 때문에 에러가 난 것)
mysql> select host, user, plugin, authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host | user | plugin | authentication_string |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| % | root | caching_sha2_password | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | caching_sha2_password | $A$005$[Z.gmzOJn FxOXSoIicHhcXSS0TUf2HGDHf8HcEXvmKZK9jjnIQYh8XI3 |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
- DDL을 이용하여 플러그인 방식을 바꿔준다.
mysql> ALTER USER '[username]'@'%' IDENTIFIED WITH mysql_native_password by '[비밀번호]';
이렇게 하고 다시 플러그인을 확인해보면 'mysql_native_password'로 잘 바뀐 것을 알 수 있다.
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host | user | plugin | authentication_string |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| % | root | mysql_native_password | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root | caching_sha2_password | $A$005$[Z.gmzOJn FxOXSoIicHhcXSS0TUf2HGDHf8HcEXvmKZK9jjnIQYh8XI3 |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
- 권한을 변경하였으니 privilege를 flush하여 반영해준다.
(FLUSH PRIVILEGES 명령어는 grant 테이블을 reload함으로서 변경사항을 즉시 반영하도록 해준다.)
mysql> FLUSH PRIVILEGES;
여기까지하고 다시 서버를 구동시켜보니 'Application running on port 3000'으로 잘 뜨는 것을 확인했다 :-)
Author And Source
이 문제에 관하여(Nestjs + MySQL Docker 연동시 에러 해결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@allsilver/Nestjs-MySQL-Docker-연동시-에러-해결저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)