本文围绕MySQL8.0开启root用户远程访问权限的配置与排错步骤(保姆级教程)整理关键信息和实用建议,帮助读者快速了解主题重点。
环境说明:MySQL 8.0.x、Windows / Linux 环境

适用场景:本地开发连接远程数据库、服务器部署项目等。
在默认情况下,MySQL 8.0 为了保证安全性,root 用户仅允许在 localhost(即本机)登录。当我们需要使用 Navicat、DBeaver 或代码等客户端进行远程连接时,就会报错 Host 'xxx' is not allowed to connect to this MySQL server。
下面是完整的配置与排错步骤:
首先,登录 MySQL 数据库,切换至 mysql 核心库,查看当前用户的访问主机限制。
-- 1. 切换至 mysql 数据库USE mysql;-- 2. 查询 user 表中的用户名和允许连接的主机(host)SELECT user, host, plugin FROM user WHERE user = 'root';
结果解析:
正常情况下,你会看到 root 用户的 host 字段值为 localhost,这意味着当前 root 被限制为仅限本地访问。
(注:这里额外查了 plugin 字段,是为了后续排查 MySQL 8 的密码加密规则做准备)。
将 root 用户的访问主机修改为 %(% 在 MySQL 中代表通配符,表示允许任意 IP 地址连接)。
-- 将 root 用户的 host 修改为 %UPDATE user SET host = '%' WHERE user = 'root';
⚠️ 【MySQL 8 极易踩坑的注意点】:
执行完 UPDATE 后,必须立刻刷新权限,否则配置不会生效!
-- 刷新系统权限表(必须执行)FLUSH PRIVILEGES;
进阶建议:
在生产环境中,出于安全考虑,极不推荐直接使用
%。建议将host设置为具体的客户端外网 IP(例如:192.168.1.100),或者使用网段(例如:192.168.1.%)。
很多时候数据库配置没问题,但依然连不上,90% 是因为防火墙拦截了 MySQL 的默认端口 3306。
(不建议直接“关闭防火墙”,有安全隐患,推荐放行端口)
Windows Defender 防火墙 -> 高级设置。TCP -> 特定本地端口输入 3306。MySQL_3306,保存即可。# 开放 3306 端口firewall-cmd --zone=public --add-port=3306/tcp --permanent# 重载防火墙规则firewall-cmd --reload
打开你的数据库连接工具(如 Navicat),输入服务器的公网IP、root账号和密码进行连接测试。
如果在第三步测试时,你遇到了如下错误:
Authentication plugin 'caching_sha2_password' cannot be loaded...
原因:
MySQL 8.0 默认的密码加密规则变成了 caching_sha2_password,而像 Navicat 11 或部分老旧客户端不支持这种加密方式。
解决方案:
将 root 用户的加密方式改回 MySQL 5.7 时代的 mysql_native_password。
-- 修改加密规则并重新设置密码('你的密码' 替换为实际密码)ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';-- 再次刷新权限!FLUSH PRIVILEGES;
执行完上述 SQL 后,再次尝试客户端连接,成功率可达 100%。
以上内容可作为基础参考,实际处理时再结合具体场景灵活调整。