报错语句和起因:

报错语句:

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;

亲测完满解决,撒花★,°:.☆( ̄▽ ̄)/$:.°★ 。。