mysql远程连接需两步:修改用户权限允许非本地登录,调整配置文件放开bind-address限制;还需开放防火墙及云安全组3306端口,并按顺序排查权限、配置、防火墙、测试环节。

要让 MySQL 支持远程连接,核心是两步:修改用户权限,允许从非本地地址登录;调整 MySQL 配置,放开绑定限制。缺一不可,否则即使账号设对了也连不上。
检查并修改 MySQL 用户的 host 权限
MySQL 默认创建的用户(比如 root)通常只允许 localhost 或 127.0.0.1 登录,远程 IP 会被拒绝。需显式授权:
- 登录 MySQL(本地):
mysql -u root -p - 查看当前用户及允许的 host:
SELECT User, Host FROM mysql.user; - 若 root 只有 localhost,可新增一个支持任意 IP 的用户(生产环境建议用具体 IP 或子网):
CREATE USER 'root'@'%' IDENTIFIED BY '你的强密码';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES; - 更安全的做法是限定来源 IP,例如只允 192.168.1.100:
CREATE USER 'appuser'@'192.168.1.100' IDENTIFIED BY 'pass123';,再赋权
修改 MySQL 配置文件,放开 bind-address
MySQL 默认只监听本地回环地址,需改配置使其接受外部连接:
- 找到配置文件:Linux 通常是
/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf;Windows 是my.ini(在 MySQL 安装目录下) - 搜索
bind-address,将其值改为:bind-address = 0.0.0.0(监听所有 IPv4 接口)
⚠️ 注意:不要删掉这行,也不要写成127.0.0.1或留空,否则无效 - 保存后重启服务:
sudo systemctl restart mysql(Ubuntu/Debian)或sudo service mysqld restart(CentOS)
确认防火墙放行 3306 端口
即使 MySQL 配置正确,系统防火墙也可能拦截远程请求:
- Ubuntu/Debian(ufw):
sudo ufw allow 3306 - CentOS 7+/RHEL(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp,然后sudo firewall-cmd --reload - 云服务器(如阿里云、腾讯云)还需在**安全组规则**中手动添加入方向 TCP:3306,来源可设为指定 IP 或 0.0.0.0/0(不推荐全放开)
测试连接是否生效
在远程机器上用客户端验证(别用图形工具先,优先用命令行排除干扰):
- Linux/macOS:
mysql -h 服务器IP -u 用户名 -p - Windows 命令提示符同上;或使用 Navicat、DBeaver 等工具,填入 IP、端口、用户名、密码
- 常见报错对照:
ERROR 1130: Host 'x.x.x.x' is not allowed to connect → 用户 host 权限未设好
Can't connect to MySQL server on 'x.x.x.x' → 防火墙/安全组/MySQL 未监听或服务未启动
Access denied for user → 密码错误或用户不存在
配置本身不复杂,但每个环节都可能卡住。建议按顺序逐项检查:用户权限 → 配置文件 → 防火墙 → 远程测试。生产环境务必避免用 root + %,应创建专用账号并限制 IP 和权限范围。










