報(bào)錯(cuò)語句和原因:
報(bào)錯(cuò)語句:
Client does not support authentication protocol requested by server
//NodeJS MySQL客戶端不支持身份驗(yàn)證協(xié)議
原因:MySql 8.0換了新的身份驗(yàn)證插件(caching_sha2_password), 舊的身份驗(yàn)證插件為(mysql_native_password)。
以默認(rèn)創(chuàng)建的用戶和密碼都是這個(gè)加密方式。而npm包里的mysql模塊還是使用原來的mysql_native_password加密方式,兩者不互通,連接會(huì)報(bào)錯(cuò)。
解決辦法:
將用戶密碼從caching_sha2_password加密方式改回的 mysql_native_password加密方式。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456789';
如上,將root用戶的密碼123456789的認(rèn)證修改成mysql_native_password,之后再連接mysql就會(huì)成功。
然后刷新緩存:
flush privileges;
注意點(diǎn)
1,@后面的host要和賬號(hào)的host對(duì)應(yīng),比如我的賬號(hào)host是%,語句就要改成%。

ALTER USER 'kason'@'%' IDENTIFIED WITH mysql_native_password BY '123456789';
2,報(bào)錯(cuò):ERROR 1396 (HY000): Operation ALTER USER failed for 'xxx'@'xxx'
其實(shí)沒有進(jìn)入mysql這個(gè)庫,就去執(zhí)行語句,自然是報(bào)錯(cuò)了。
順序如下:
1,先進(jìn)入mysql這個(gè)數(shù)據(jù)庫。
2,執(zhí)行改密碼驗(yàn)證方式(建議和原密碼一致,會(huì)一起修改掉密碼)。
3,刷新緩存。
use mysql;
ALTER USER 'kason'@'%' IDENTIFIED WITH mysql_native_password BY '123456789';
flush privileges;