前言
很多小伙伴安装完 MySQL8.0 后,本地可以正常连接,但是 Navicat、IDEA、服务器外网全部连不上。
常见报错:
1045 Access denied for user 'root'@'xxx'
2003 Can't connect to MySQL server on xxx
连接超时、拒绝连接、权限不足
网上很多教程是 MySQL5.7 的旧命令,在8.0版本完全失效,甚至导致数据库锁死。
今天给大家一套 MySQL8.0 专属、百分百成功的远程连接配置方案,一次搞定所有远程连接问题。
一、两种报错原因快速区分
1、2003错误
服务器防火墙/端口未开放、MySQL未监听外网IP
服务器 3306 端口没放行
MySQL 只监听了本地 127.0.0.1
2、1045错误
账号不允许外网登录、密码加密方式不匹配、权限不足
root 默认仅允许 localhost 登录
MySQL8.0 使用 caching_sha2_password 加密,客户端不支持
二、第一步:开启外网访问权限(MySQL8.0 正确命令)
登录本地 MySQL
mysql -u root -p
1. 创建可远程登录用户(推荐)
不建议直接改 root,容易安全风险,新建远程用户:
CREATE USER 'remote'@'%' IDENTIFIED BY '你的密码';
2. 授予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%' WITH GRANT OPTION;
3. 刷新权限
FLUSH PRIVILEGES;
4.适配 Navicat 连接(解决8.0加密报错)
ALTER USER 'remote'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';
FLUSH PRIVILEGES;
三、第二步:修改MySQL绑定地址
打开 mysql 配置文件
Linux
vim /etc/my.cnf
Windows
打开 my.ini
找到:
bind-address = 127.0.0.1
修改为:
bind-address = 0.0.0.0
含义:允许所有IP连接数据库
重启 MySQL
systemctl restart mysqld
四、第三步:服务器放行3306端口
1、关闭防火墙 或 放行端口
CentOS / Linux 放行端口:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
2、云服务器额外配置
阿里云/腾讯云必须在 安全组 手动放行 3306 端口
否则怎么改数据库配置都连不上!
五、root账号无法远程连接解决办法(按需选择)
如果非要使用 root 远程连接,执行:
UPDATE mysql.user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
生产环境不推荐!不安全!
六、终极排查流程(99%问题可解决)
看报错是2003还是1045
2003 → 检查端口、防火墙、bind-address
1045 → 检查用户host权限、密码加密方式
强制刷新权限、重启MySQL
检查云服务器安全组策略
七、常见踩坑总结
不要用5.7的授权命令 grant all ... identified by,8.0会直接报错
只改配置不重启 MySQL 不会生效
本地能连、外网不能连,99%是安全组/防火墙问题
Navicat 连接报错优先修改 mysql_native_password 加密规则
总结
MySQL8.0 远程连接失败基本就三类问题:权限配置、加密规则、端口放行。
按照本文三步操作,可一次性解决 1045、2003、连接超时、拒绝连接等所有远程异常。
持续更新后端实战踩坑、服务器部署、数据库调优干货!
有问题评论区交流,全部回复!