世界睡了🌙,故事醒着。
记一次项目连接 MySQL 报错 ER_NOT_SUPPORTED_AUTH_MODE
发布时间:2024/10/31
浏览量:...

前情提要

这一天,我满心欢喜地我刚换不久的 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, and SET PASSWORD operations now insert a deprecation warning into the server error log if an account attempts to authenticate using mysql_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';

你会发现:

userhostplugin
rootlocalhostcaching_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 '你的密码';

到此,大功告成!