【踩坑实录】MySQL 8.0 远程连接报错1130+1064 终极解决指南
刚在CentOS上装完MySQL 8.0,本地登录一切正常,结果用DBeaver远程连接直接报错?遇到
Host is not allowed to connect和SQL syntax error两个连环坑,网上很多老教程都是MySQL 5.x的语法,在8.0里直接踩雷,亲测有效的完整步骤整理好了,复制就能用!
一、问题现象
1. 远程连接直接被拒绝(1130报错)
DBeaver测试连接时,直接抛出经典错误:
[HY000][1130] Host '192.168.100.1' is not allowed to connect to this MySQL server
意思很明确:你的客户端IP(192.168.100.1)不在MySQL的允许登录列表里,直接被拒了。
2. 照着老教程操作,直接报语法错误(1064报错)
很多老教程会教你用GRANT ALL PRIVILEGES ... IDENTIFIED BY一步到位,结果在MySQL 8.0里直接报错:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'xxx' WITH GRANT OPTION' at line 1
这是因为MySQL 8.0把这个语法砍了!
二、报错根因分析
1. 1130报错的本质:MySQL的用户不是单靠用户名区分的
MySQL的完整用户身份是 '用户名'@'允许登录的IP/主机名',比如默认的root@localhost,意思是只有服务器本机(localhost/127.0.0.1)能用root用户登录,你的客户端IP不在白名单里,自然被拒绝。
2. 1064报错的本质:MySQL 8.0 移除了GRANT创建用户的语法
在MySQL 5.x里,GRANT ALL PRIVILEGES ... IDENTIFIED BY是“三合一”操作:创建用户+设置密码+分配权限,一步搞定。
但MySQL 8.0强制拆分了「创建用户」和「授权」两个步骤,旧语法直接失效,必须分开执行。
三、亲测有效:完整解决步骤
以下操作全部在你的CentOS服务器终端执行,复制代码后修改成你自己的IP和密码即可。
步骤1:本地登录MySQL
先在服务器上用root账号本地登录MySQL:
mysql -u root -p
输入你的MySQL root密码,登录成功后会进入mysql>命令行。
步骤2:创建允许远程连接的用户(指定IP,安全优先)
重点:MySQL 8.0 必须先创建用户,再授权!
这里以允许你的客户端IP 192.168.100.1 用root用户登录为例:
-- 创建用户,指定允许登录的IP和密码
CREATE USER 'root'@'192.168.100.1' IDENTIFIED BY '你的MySQL root密码';
- 如果你想只在开发环境用,也可以用
'%'允许所有IP登录(不推荐生产环境使用):CREATE USER 'root'@'%' IDENTIFIED BY '你的MySQL root密码';
步骤3:给用户分配权限
给刚创建的用户分配所有数据库的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.100.1' WITH GRANT OPTION;
*.*表示所有数据库、所有表的权限WITH GRANT OPTION允许该用户给其他用户授权(开发环境可保留)
步骤4:刷新权限,让配置立即生效
修改权限后必须刷新,否则MySQL不会加载新的规则:
FLUSH PRIVILEGES;
执行完成后输入exit;退出MySQL命令行。
步骤5:(可选)修改认证插件,适配旧客户端
如果你的DBeaver/Navicat版本较旧,可能会遇到caching_sha2_password认证不支持的问题,提前修改用户的认证方式:
ALTER USER 'root'@'192.168.100.1' IDENTIFIED WITH mysql_native_password BY '你的MySQL root密码';
FLUSH PRIVILEGES;
步骤6:放行防火墙3306端口
CentOS默认防火墙会拦截MySQL的3306端口,必须手动放行:
# 永久放行3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新加载防火墙规则
firewall-cmd --reload
步骤7:回到DBeaver测试连接
修改你的连接配置:
- 主机:你的服务器IP(比如
192.168.100.128) - 端口:
3306 - 用户:
root - 密码:你的MySQL root密码
点击「测试连接」,直接成功!
四、避坑总结&安全建议
- 不要用老教程的GRANT三合一语法:MySQL 8.0必须先
CREATE USER再GRANT,否则必报1064错误。 - 优先指定IP,不要用%通配符:
root@'%'允许所有IP登录,生产环境极其不安全,强烈建议指定你的客户端IP。 - 防火墙一定要放行:很多人权限配置对了,但忘了开端口,还是连不上,记得用
firewall-cmd --list-ports检查3306是否放行。 - 生产环境不要用root远程登录:建议创建一个专用的远程用户,只给必要的权限,比如只读权限,避免root密码泄露带来的风险。
- SELinux问题(可选):如果以上步骤都做了还是连不上,检查一下SELinux是否开启,临时关闭
setenforce 0测试一下。
五、写在最后
MySQL 8.0和5.x的远程连接配置差异很大,很多老教程已经过时了,踩了这两个坑之后整理了这篇完整的指南,亲测有效。如果还有其他问题,欢迎在评论区留言交流~
更多推荐



所有评论(0)