报错语句和原因:
报错语句:
Client does not support authentication protocol requested by server
//NodeJS MySQL客户端不支持身份验证协议
原因:MySql 8.0换了新的身份验证插件(caching_sha2_password), 旧的身份验证插件为(mysql_native_password)。
以默认创建的用户和密码都是这个加密方式。而npm包里的mysql模块还是使用原来的mysql_native_password加密方式,两者不互通,连接会报错。
解决办法:
将用户密码从caching_sha2_password加密方式改回的 mysql_native_password加密方式。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789';
如上,将root用户的密码123456789的认证修改成mysql_native_password,之后再连接mysql就会成功。
然后刷新缓存:
flush privileges;
注意点
1,@后面的host要和账号的host对应,比如我的账号host是%,语句就要改成%。
ALTER USER 'kason'@'%' IDENTIFIED WITH mysql_native_password BY '123456789';
2,报错:ERROR 1396 (HY000): Operation ALTER USER failed for 'xxx'@'xxx'
其实没有进入mysql这个库,就去执行语句,自然是报错了。
顺序如下:
1,先进入mysql这个数据库。
2,执行改密码验证方式(建议和原密码一致,会一起修改掉密码)。
3,刷新缓存。
use mysql;
ALTER USER 'kason'@'%' IDENTIFIED WITH mysql_native_password BY '123456789';
flush privileges;