环境:CentOS8/9、Rocky、AlmaLinux、MySQL8.0、阿里云 ECS
核心三步:MySQL 授权远程用户 → 关闭绑定本地 → 放行系统防火墙 → 阿里云安全组放行 3306
一、修改 MySQL 配置,允许全网监听
编辑配置文件
bash
运行
vi /etc/my.cnf
在
[mysqld]模块添加 / 修改:
ini
[mysqld]
# 允许所有IP连接
bind-address = 0.0.0.0
# 跳过域名解析,提升连接速度
skip-name-resolve
保存退出 :wq
重启 MySQL
bash
运行
systemctl restart mysqld
二、MySQL 创建远程账号、授权(两种方案)
方案 1:直接允许 root 远程登录(开发常用)
bash
运行
# 登录mysql
mysql -uroot -p
执行 SQL:
sql
-- 修改root允许任意IP % 连接
ALTER USER 'root'@'%' IDENTIFIED BY 'Root@123456';
-- 赋予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
exit;
方案 2:新建专用远程用户(生产推荐,更安全)
sql
CREATE USER 'remote'@'%' IDENTIFIED BY 'Remote@123456';
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%';
FLUSH PRIVILEGES;
MySQL8.0 必须用
ALTER USER / CREATE USER,不能用老版本授权方式,否则报错。
三、服务器防火墙放行 3306 端口
firewalld 环境(默认)
bash
运行
# 永久放行3306
firewall-cmd --permanent --add-port=3306/tcp
# 重载生效
firewall-cmd --reload
# 查看是否放行
firewall-cmd --list-ports
关闭防火墙(测试环境偷懒用)
bash
运行
systemctl stop firewalld
systemctl disable firewalld
四、【关键】阿里云 ECS 安全组放行 3306
这一步 90% 人漏掉,导致连不上!
阿里云控制台 → 找到你的 ECS 实例
左侧「安全组」→ 点击当前实例绑定的安全组
入方向规则 → 手动添加:
授权策略:允许
协议类型:TCP
端口范围:
3306/3306授权对象:
0.0.0.0/0(所有 IP)描述:MySQL 远程访问
保存规则,立即生效。
五、测试连接
本地 Navicat/DBeaver/ 数据库工具
连接参数:
主机:阿里云 ECS 公网 IP
端口:3306
账号:root / 自定义 remote
密码:你设置的密码
常见报错解决
1045 拒绝访问:授权语句没执行对、密码错误
10060 连接超时:阿里云安全组未放行 3306
10061 无法连接:MySQL 未启动、bind-address=127.0.0.1 限制本地
密码策略报错:密码必须包含:大写 + 小写 + 数字 + 特殊符号,长度≥8