업데이트:

최근 SQL 학습을 위해 Node.js에 MySQL을 연동하던 중 오류가 발생하였다. 테이블의 모든 컬럼을 조회하기 위해 작성한 아래 js 파일을 실행한 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'username',
  password: 'password',
  database: 'my_db',
  port: '3306',
});

connection.connect();

const sql = `SELECT * FROM my_table`;

connection.query(sql, (error, results, fields) => {
  if (error) throw error;
  console.log(results);
});

connection.end();

다음과 같은 에러메시지가 터미널에 출력된다.

1
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

검색을 해보니 비밀번호 설정 문제라는 의견이 있었고, 혹시 Node.js와 MySQL을 연동하려 설치한 MySQL 계정의 비밀번호와 일전에 세팅해둔 apmsetup의 MySQL 비밀번호가 충돌이 나서 그런건가 싶었다. 애초에 apmsetup을 세팅했는데 MySQL을 또 설치한 바보 같은 나님 같으니.. 너무 오래되서 까먹고 있었나보다.

1
2
ALTER USER '[username]'@'[host]' IDENTIFIED WITH mysql_native_password BY '[password]';
flush privileges;

위 쿼리를 실행해도 안되서 아래 절차를 실행, 해결을 하였다.

  1. MySQL installer 실행
  2. MySQL Server - Reconfigure 클릭
  3. Authentication Method → Use Legacy.. 체크

오류의 원인

원인을 요약하자면, MySQL 8부터 기본 인증 프로토콜이 기존의 mysql_native_password에서 caching_sha2_password로 변경되었고, 기존의 방식을 지원하지 않게 되서 발생한 문제라고 한다. 자세한 내용은 맨 하단에 기재해둔 링크의 아티클을 참고하면 된다.

참고

Hero image from CopyrightFreePictures