在开发node.js服务器时,需要通过node的mysql连接数据库。偷懒用docker pull了一个下来,然后发现除了root都无法正常连接这个数据库。
错误提示如下
ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
通过报错信息可知,node.js提示鉴权协议与服务器不兼容,然而我在查阅很多资料之后也全部都是说node.js不支持MySQL8.0+ 的连接协议。
难道真是如此吗?
其实问题本身真的很简单,进入到MySQL里面查看一下用户情况:
mysql -u root -p # 登录mysql
use mysql
select user from user # 查询用户信息
然后检查一下需要连接的用户的Host是否为 '%',如果为localhost那么是只能本地(Docker容器内部访问的)
接着输入
ALTER USER ‘user’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘password’;
FLUSH PRIVILEGES;
来修改特定用户的连接设置,问题解决。