环境说明:mysql 8.0.x、windows / linux 环境
适用场景:本地开发连接远程数据库、服务器部署项目等。
在默认情况下,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 防火墙(入站规则配置)
(不建议直接“关闭防火墙”,有安全隐患,推荐放行端口)
- 打开 控制面板 ->
windows defender 防火墙-> 高级设置。 - 点击左侧的 入站规则,右侧点击 新建规则。
- 选择 端口 ->
tcp-> 特定本地端口输入3306。 - 选择 允许连接,一路下一步,命名为
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%。
总结
到此这篇关于mysql8.0开启root用户远程访问权限的配置与排错步骤的文章就介绍到这了,更多相关mysql开启root用户远程访问权限内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论