为何Node.js代码在XAMPP MySQL运行时正常,MySQL Notifier服务却报错?
解决Node.js连接MySQL时的ER_NOT_SUPPORTED_AUTH_MODE错误
嘿,这个问题我之前刚碰到过!先给你捋清楚为啥会出现这个状况:
你用XAMPP的MySQL能正常连接,是因为XAMPP自带的MySQL版本通常偏低,默认用的是mysql_native_password这种旧认证方式;而你从MySQL官网安装的是8.0+的新版本,默认启用了更安全的caching_sha2_password认证插件,但你当前用的mysql npm包并不支持这个新协议,所以才会抛出那个错误。
下面给你两种靠谱的解决办法,选哪种都能搞定:
方法一:修改MySQL用户的认证方式
这种方法不用换npm包,直接调整MySQL的用户设置就行:
- 打开MySQL命令行客户端(或者用MySQL Workbench),登录到你的MySQL服务器
- 执行以下SQL语句(记得把
'你的密码'替换成你自己的root密码):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;
如果你的连接用户不是root,或者需要远程连接,把'root'@'localhost'改成对应的用户名和主机地址就好。
执行完之后再跑你的Node.js脚本,应该就能顺利连接了。
方法二:改用支持新认证的MySQL客户端包
要是你想保留MySQL的新认证方式(毕竟更安全),可以换成mysql2 npm包,它完全兼容caching_sha2_password:
- 先卸载旧的
mysql包:
npm uninstall mysql
- 安装
mysql2:
npm install mysql2
- 修改你的Node.js代码,把引入包的部分改成:
var mysql = require('mysql2');
剩下的连接代码不用动,mysql2的API和原来的mysql包几乎完全一致,直接就能用。
两种方法都能解决问题,看你更倾向哪种啦~
内容的提问来源于stack exchange,提问作者Nicholas
相关产品推荐
相关产品推荐

