MySQL 8.0与Node.js连接失败:客户端不支持服务器认证协议求助
解决MySQL 8.0与Node.js客户端认证协议不兼容问题
嘿,这个坑我刚踩过!你遇到的问题是MySQL 8.0和旧版Node.js MySQL客户端的认证协议不兼容导致的——MySQL 8.0默认启用了更安全的caching_sha2_password身份验证插件,但你用的mysql npm包(旧版本)只支持传统的mysql_native_password,所以才会抛出「Client does not support authentication protocol requested by server」这个错误。
给你两种靠谱的解决办法,选一种就行:
方法一:升级到支持新认证的MySQL客户端包
原来的mysql npm包已经停止维护了,官方推荐用mysql2,它完美支持MySQL 8.0的新认证机制,步骤很简单:
- 先卸载旧包:
npm uninstall mysql - 安装
mysql2:npm install mysql2 - 修改你的代码,把导入模块的部分换成
mysql2,其余逻辑不用改:var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "password" }); con.connect(function(err) { if (err) throw err; console.log("Connected!"); });
方法二:修改MySQL用户的认证方式为旧版(适合不想换包的场景)
如果你不想更换客户端包,可以手动把root用户的认证方式改回传统的mysql_native_password:
- 打开MySQL命令行(或者用Workbench),用root账号登录
- 执行以下SQL语句(记得把
'password'换成你实际的root密码):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; FLUSH PRIVILEGES; - 重启你的Node.js服务,再运行代码就能正常连接了。
内容的提问来源于stack exchange,提问作者Pig
相关产品推荐
相关产品推荐

