[ERROR] java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required

DY_DEV·2023년 6월 20일
0

ERROR

목록 보기
2/4

해결하고 나서 너무 허탈한 나머지 5분정도 멍을 때렸다. 이 상태라면 내년 멍때리기 대회 입상은 확정일지도...?😭 하루가 넘는 시간이 이 오류로 증발해버렸기 때문에 같은 실수를 반복하지 않기 위해 기록을 남긴다.

발단

spring boot 프로젝트를 MySQL과 연동하는 과정에서 직면했다.

  • MySQL의 버전을 명시했다.
  • 작성했었던 application.yml
    spring:
    datasource:
      url: jdbc:mysql://localhost:3306/{데이터베이스 이름}?useSSL=false&allowPublicKeyRetrieval=true&useLegacyAuth=false // db 이름 뒤에는 굳이 안와도 된다.  
      username: {유저이름}
      password: {비밀번호}
      driver-class-name: com.mysql.cj.jdbc.Driver
    jpa:
      database-platform: org.hibernate.dialect.MySQL8Dialect
      hibernate:
        ddl-auto: create  # 스키마 자동 생성
      show-sql: true      # SQL query 출력
      properties:
        hibernate:
          format_sql: true  # SQL pretty print
    

원인

구글링을 해보니 해당 문제의 원인은 클라이언트와 MySQL 서버 간의
인증 방식의 불일치라는 답변이 대부분이었다. 더 세부적으로,
1. MySQL 서버 버전과 JDBC 드라이버 버전이 다른경우
2. URL이 올바른 구성이 아닌경우
3. 사용하는 MySQL의 올바른 인증 방법을 사용하지 않은 경우
4. JDBC 드라이버의 의존성 문제인 경우
5. 사용자 인증정보가 잘못된 경우

해당 정보들을 바탕으로한 시도

데이터베이스 새로 생성 후 유저 정보 생성

mysql database add
1. CREATE DATABASE 데이터베이스이름;

mysql user add
1. CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';
2. GRANT ALL PRIVILEGES ON <database>.* TO '<username>'@'localhost';
3. FLUSH PRIVILEGES;
  • 데이터베이스와 유저정보, 권한이 잘 생성된 것을 확인했지만 여전히 같은 문제가 발생했다.

해결

구글링을 더 진행해본 결과 해당 문제는 내 pc에서 여러개의 MySQL 서버가 동작하는 것이 원인이었다. 이전에 진행하던 프로젝트의 서버가 동시에 동작해 충돌을 일으킨 것 같다.

  1. cmd를 열고 아래 명령어를 입력해 현재 진행되는 MySQL 서버를 확인한다.

tasklist /fi "imagename eq mysqld.exe"


2. 이처럼 진행중인 서버를 확인했다면 '작업관리자'를 열어 작업을 수동으로 끝내준다.

위 두 파일은 현재 서버와 연관된 것 같아 종료하지않았다.
삭제 후 intelliJ spring boot를 실행하면, MySQL workbench 상에서 프로젝트의 테이블들이 정상적으로 생성된 것을 확인할 수 있다.

참고

https://stackoverflow.com/questions/71392403/client-plugin-auth-is-required

0개의 댓글