Sails 1.0连接MySQL 8.0遇ER_NOT_SUPPORTED_AUTH_MODE错误求助
解决SailsJS连接MySQL时的ER_NOT_SUPPORTED_AUTH_MODE错误
这个问题我之前帮不少开发者解决过,本质是MySQL 8.0+默认启用了caching_sha2_password认证机制,但你当前使用的sails-mysql依赖的旧版mysql客户端库不支持这个新协议。下面给你两个靠谱的解决思路:
方案一:修改MySQL用户的认证方式(快速临时解决)
直接把你的root用户认证方式改回旧版的mysql_native_password,适配现有客户端:
- 打开终端,登录MySQL控制台:
输入你的root密码(这里是mysql -u root -proot)回车进入。 - 执行以下SQL命令修改用户认证:
注意:如果你的MySQL用户允许远程访问,把ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;localhost换成%即可。 - 退出MySQL控制台,重新运行
sails lift,应该就能正常连接了。
方案二:升级Sails的MySQL适配器(长期推荐方案)
改用支持新认证机制的sails-mysql2适配器,适配MySQL 8.0+的特性:
- 先卸载旧的适配器:
npm uninstall sails-mysql - 安装新版适配器:
npm install sails-mysql2 - 修改
config/datastores.js里的配置,替换适配器:default: { adapter: require('sails-mysql2'), url: 'mysql://root:root@localhost/ventas' }, - 重新启动
sails lift,这个方案能从根本上解决兼容性问题,后续MySQL版本升级也更省心。
额外注意事项
- 确保你的MySQL服务是正常运行的,并且
ventas数据库已经存在。 - 如果是远程MySQL服务器,要确认防火墙已经开放3306端口,且用户拥有对应主机的访问权限。
内容的提问来源于stack exchange,提问作者Toshio Minei
相关产品推荐
相关产品推荐

