nodejs 连接 mysql 出现 Client does not support authentication protocol requested by server; consider ...

阿里云上使用docker运行mysql镜像
MySQL版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

在实现网上的一个基于Vue实现的后台管理系统的环境时 (https://gitee.com/wBekvam/vueShop-api-server/tree/master),出现报错,发现原因是mysql服务器要求的认证插件版本与客户端不一致造成的。

打开mysql命令行输入如下命令查看,系统用户对应的认证插件:
image.png

可以看到root用户使用的plugin是caching_sha2_password,mysql官方网站有如下说明:
image.png

意思是说caching_sha2_password是8.0默认的认证插件,必须使用支持此插件的客户端版本。

plugin的作用之一就是处理后的密码格式和长度是不一样的,类似于使用MD5加密和使用base64加密一样对于同一个密码处理后的格式是不一样的。

解决方法:

我不希望更新本地的客户端版本,想直接使用原来的环境来链接。

解决方法是将root的plugin改成mysql_native_password。相当于降了一级。

mysql官方网站提供了从mysql_old_password升级到mysql_native_password,我们可以仿照这个。官方原文如下:


image.png

这里改成:

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

这行代码有两层含义,第一:修改root的密码为'root',摒弃原来的旧密码。第二:使用mysql_native_password对新密码进行编码。

修改完成后再用客户端登陆成功:

补充:

如果在修改插件的时候出现错误,可现将插件改为 mysql_old_password,然后再升级成mysql_native_password,方法:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容