You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8远程访问认证失败求助:本地连接正常

解决MySQL 8.x远程连接"Authentication failed"问题

我之前帮好几个开发者排查过和你一模一样的问题——在MySQL 8.x上配置远程访问时,明明加了bind-address 0.0.0.0、给用户开了%权限,却还是报认证失败,但本地连接完全正常。核心原因其实是MySQL 8.x对默认认证插件做了关键改动,具体解决步骤如下:

先搞清楚问题根源

MySQL 5.7及之前的版本默认使用mysql_native_password作为认证插件,而MySQL 8.x默认换成了caching_sha2_password。很多旧版远程客户端(比如低版本的Navicat、旧JDBC驱动)还不支持这个新的加密认证方式,这就是你遇到认证失败的核心原因。

你可以先本地登录MySQL,执行这条命令确认用户的认证插件:

SELECT user, host, plugin FROM mysql.user;

看看你授权了%的那个用户,plugin字段是不是caching_sha2_password。

解决方案(二选一)

方法一:修改用户为兼容性更好的认证插件(推荐)

这个方法能快速解决大多数客户端不兼容的问题,把用户的认证方式改回旧版的mysql_native_password:

  1. 本地登录MySQL后,执行:
ALTER USER '你的用户名'@'%' IDENTIFIED WITH mysql_native_password BY '你的用户密码';
  1. 刷新权限使配置生效:
FLUSH PRIVILEGES;

改完之后再尝试远程连接,大概率就能成功了。

方法二:保留新认证插件,更新客户端

如果你想使用MySQL 8.x的新认证机制,需要确保你的远程客户端支持caching_sha2_password:

  • GUI工具:比如Navicat要升级到12.1及以上版本,DataGrip等IDE要更新到最新版
  • 编程驱动:比如JDBC驱动要用8.0.x版本,Python的mysql-connector-python也要安装最新版

另外还要确认你的MySQL配置没有其他限制:

  • 检查mysqld.cnf里有没有skip_networking配置项,如果有要注释掉
  • 有些MySQL 8的发行版可能把配置分散在多个文件里,比如/etc/mysql/my.cnf.d/server.cnf,要确保所有相关配置文件里的bind-address都是0.0.0.0

额外排查点

如果上面的方法还不行,再检查这两个点:

  • 服务器防火墙有没有放行3306端口:比如Ubuntu用ufw allow 3306,CentOS用firewall-cmd --permanent --add-port=3306/tcp然后重启防火墙
  • 用telnet 你的服务器IP 3306或者nc -zv 你的服务器IP 3306测试端口是否能正常访问,排除网络层面的问题

内容的提问来源于stack exchange,提问作者sHaDeoNeR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:39:43