code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
sqlState: '08004',
fatal: true
# mysql 외부 접속 허용이 되어 있는지 확인
mysql> select host, user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
4 rows in set (0.00 sec)
위와같이 host에 localhost 이외의 주소가 없다면 외부 접속 허용이 불가능한 것이다.
MySQL에서 % 는 와일드 카드로 사용된다.
서버와 같은 외부에서 허용하도록 하려면 host주소에 %로 지정해주면 된다.
# MySQL8부터는 이렇게...
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
# 잘 생성되었는지 확인
mysql> select host, user from mysql.user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | mysql.infoschema |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+------------------+
5 rows in set (0.00 sec)
MySQL 8.0에서는 MySQL 패스워드 플러그인 "caching_sha2_password" 때문에 클라이언트 프로그램에서 종종 지금과 같은 에러가 발생한다.
mysql> select host, user, plugin, authentication_string from mysql.user;
위의 SQL 문으로 자신의 데이터베이스의 패스워드 플러그인을 확인할 수 있다.
문제를 찾았으니 플러그인을 바꿔보자.
"mysql_native_password" 플러그인으로 바꿔주면 정상 작동할 것이다.
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
잘 바뀐것을 확인할 수 있다 :-)
덕분에 해결했습니다~!! >.< 너무 감사드려요!!