MySQL8.0开启root用户远程访问权限的配置与排错步骤(保姆级教程)

作者:袖梨 2026-07-30

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

环境说明:MySQL 8.0.x、Windows / Linux 环境

img_6a6aeb6f4298f30.webp

适用场景:本地开发连接远程数据库、服务器部署项目等。

在默认情况下,MySQL 8.0 为了保证安全性,root 用户仅允许在 localhost(即本机)登录。当我们需要使用 Navicat、DBeaver 或代码等客户端进行远程连接时,就会报错 Host 'xxx' is not allowed to connect to this MySQL server

下面是完整的配置与排错步骤:

第一步:查询当前 root 用户的访问权限

首先,登录 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 用户的 host 为%

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

方案 A:Windows 防火墙(入站规则配置)

(不建议直接“关闭防火墙”,有安全隐患,推荐放行端口)

  1. 打开 控制面板 -> Windows Defender 防火墙 -> 高级设置。
  2. 点击左侧的 入站规则,右侧点击 新建规则。
  3. 选择 端口 -> TCP -> 特定本地端口输入 3306
  4. 选择 允许连接,一路下一步,命名为 MySQL_3306,保存即可。

方案 B:Linux 防火墙(如 firewalld)

# 开放 3306 端口firewall-cmd --zone=public --add-port=3306/tcp --permanent# 重载防火墙规则firewall-cmd --reload

第四步:测试连接(Try)

打开你的数据库连接工具(如 Navicat),输入服务器的公网IP、root账号和密码进行连接测试。

终极排错:如果依然报错怎么办?(Authentication plugin问题)

如果在第三步测试时,你遇到了如下错误:

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%。

总结

以上内容可作为基础参考,实际处理时再结合具体场景灵活调整。

相关文章

精彩推荐