前情提要
这一天,我满心欢喜地我刚换不久的 MacBook Pro,打开了我心爱 Webstorm,从 GitHub 上拉取了项目,熟练的敲起了npm run dev
,结果报错,仔细一看,我大抵是有点傻了,竟是没有安装MySQL。于是,我去官网上安装了8.4.3LTS版本的 MySQL,配置好数据库之后,我又一次在终端中熟练的敲起了npm run dev
,然而项目依然没有如我所想的那样一般跑起来…
报错:ER_NOT_SUPPORTED_AUTH_MODE
查阅文档发现,在MySQL 8.0.34的更新日志中:
The
mysql_native_password
authentication plugin now is deprecated and subject to removal in a future version of MySQL.CREATE USER
,ALTER USER
, andSET PASSWORD
operations now insert a deprecation warning into the server error log if an account attempts to authenticate usingmysql_native_password
as an authentication method. (Bug #35336317)
也就是说,mysql_native_password认证插件在8.0.34及以后的版本中将被弃用,取而代之的是caching_sha2_password认证插件,而在我使用eggjs中连接MySQL使用的仍然是mysql_native_password插件,因此项目无法成功运行。
OK,知道了问题,目前为了将项目先跑起来,我现在需要做的就是开启使用mysql_native_password插件。
在终端中连接 MySQL 后,输入:
select user, host, plugin from mysql.user where user='root';
你会发现:
user | host | plugin |
---|---|---|
root | localhost | caching_sha2_password |
要使用mysql_native_password
插件我们需要这样修改:
alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
这个时候可能会出现报错:mysql_native_password is not loaded
这是因为在mysql_native_password插件在弃用之后,默认是关闭的,所以需要找到MySQL的配置文件,将该插件开启即可
[mysqld]
mysql_native_password=ON
重启 MySQL 之后,连接 MySQL 重新输入alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
到此,大功告成!