Docker环境下Node-RED连接MySQL8.0报ER_NOT_SUPPORTED_AUTH_MODE错误如何解决
问题根因
你遇到的报错是MySQL 8.x版本的典型兼容性问题:
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
MySQL 8.0起默认启用caching_sha2_password作为身份认证插件,而Node-RED v2.1.3内置的MySQL节点、旧版Grafana MySQL客户端均不支持该认证协议,仅兼容旧版mysql_native_password认证方式。你可以通过PuTTY正常连接是因为本地使用的MySQL客户端已经适配了新版认证协议。
修复步骤
方式1:修改数据库用户认证插件(推荐,不影响全局配置)
- 进入MySQL容器命令行
执行宿主机命令:docker exec -it <你的MySQL容器名称> mysql -u root -p
输入MySQL root密码进入数据库交互界面。 - 修改对应用户的认证规则
执行SQL语句,将你用于Node-RED、Grafana连接的用户认证方式改为旧版协议:
如果你直接使用root用户连接,执行:ALTER USER '你的数据库用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的数据库用户密码';ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root用户密码'; - 刷新权限生效
执行SQL语句:FLUSH PRIVILEGES; - 验证修改结果
执行SQL语句查看用户认证插件:
返回结果中SELECT user, host, plugin FROM mysql.user WHERE user='你使用的连接用户名';plugin字段显示为mysql_native_password即为修改成功。 - 重启Node-RED、Grafana容器后重新尝试连接即可。
方式2:修改MySQL全局默认认证插件
如果你需要所有用户默认使用旧版认证协议,可以修改MySQL配置:
- 进入MySQL容器的
/etc/mysql/my.cnf(或对应持久化的配置文件),在[mysqld]段落下添加配置:default_authentication_plugin=mysql_native_password - 重启MySQL容器后,所有新创建的用户默认使用
mysql_native_password认证,已创建的用户需要重新执行ALTER USER语句修改。
配置校验
你提供的Node-RED配置仅需要确认以下信息即可,无需额外调整:
- 主机地址:如果Node-RED和MySQL在同一个Docker自定义网络下,填MySQL容器名即可;如果是跨网络访问,填虚拟机公网IP
20.107.194.152 - 端口:确认填
3306,且MySQL容器的3306端口已正确映射到宿主机、Azure安全组已开放3306端口入站规则 - 用户名、密码和数据库名称和你实际配置一致。

内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

