场景

如果使用MySQL 8.0,那么在启动CabloyJS后端服务时,经常会出现错误: nodejs.ER_NOT_SUPPORTED_AUTH_MODEError

原因

MySQL 8.0引入了一个新的加密方式caching_sha2_password,而且是默认设置,因此root用户和新增加的用户都默认采用此加密方式对密码进行加密

https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html

然而最新的MySQL NodeJS模块并未完全支持MySQL 8.0的caching_sha2_password加密方式,从而导致连接错误

解决方案

现有用户

修改用户root的密码,并指定mysql_native_password的加密方式

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

新建用户

使用mysql_native_password创建新用户

CREATE USER 'newuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';