Windows 连接 Linux 上的 MySQL:最稳妥的配置方法与排查思路
一、问题分析
很多人都会遇到这种情况:Linux 服务器上的 MySQL 已经装好了,但 Windows 电脑里用 Navicat、DBeaver、HeidiSQL,甚至命令行都连不上。
这类问题通常不是 MySQL 本身坏了,而是下面几个环节没配好:
- MySQL 默认只允许本机连接
- Linux 防火墙没放行 3306 端口
- MySQL 用户权限没开放远程登录
- MySQL 配置文件绑定了 127.0.0.1
- 云服务器安全组没开端口
- Windows 侧连接参数写错
只要按顺序检查,基本都能解决。
二、解决方案
1. 先确认 Linux 上的 MySQL 正常运行
先在 Linux 服务器上检查 MySQL 服务状态。
CentOS / Rocky / AlmaLinux
systemctl status mysqld
Ubuntu / Debian
systemctl status mysql
如果没启动,执行:
CentOS 系
systemctl start mysqld
systemctl enable mysqld
Ubuntu 系
systemctl start mysql
systemctl enable mysql
检查 MySQL 是否监听 3306 端口
ss -lntp | grep 3306
如果看到类似 0.0.0.0:3306 或 :::3306,说明服务在监听。
如果只看到 127.0.0.1:3306,那就说明它只接受本机连接,远程机器连不上。
2. 修改 MySQL 配置,允许远程访问
这是最关键的一步。
找到配置文件
常见位置:
/etc/my.cnf/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf
用命令查看:
grep -R "bind-address" /etc/my.cnf /etc/mysql/ 2>/dev/null
修改 bind-address
如果看到:
bind-address = 127.0.0.1
把它改成:
bind-address = 0.0.0.0
意思是允许所有网卡地址连接。
如果有 skIP-networking,注释掉
如果配置里有:
skip-networking
要注释或删除,否则 MySQL 不接受 TCP 连接。
修改后重启 MySQL
systemctl restart mysqld
或:
systemctl restart mysql
3. 给 MySQL 用户开远程权限
即使端口开了,如果用户权限不对,Windows 还是连不上。
进入 MySQL
mysql -u root -p
查看现有用户
SELECT user, host FROM mysql.user;
你会看到类似:
root@localhosttest@localhost
这说明这个用户只能本机登录。
新建一个允许远程登录的用户
推荐不要直接开放 root,单独建一个管理账号更安全。
CREATE USER 'winuser'@'%' IDENTIFIED BY '你的强密码';
% 表示允许从任意主机连接。
授权数据库权限
如果只想管理某一个库,比如 testdb:
GRANT ALL PRIVILEGES ON testdb.* TO 'winuser'@'%';
如果想允许管理全部库:
GRANT ALL PRIVILEGES ON *.* TO 'winuser'@'%' WITH GRANT OPTION;
刷新权限
FLUSH PRIVILEGES;
退出
exit;
4. 放行 Linux 防火墙端口 3306
CentOS / RHEL / Rocky / AlmaLinux 使用 firewalld
查看是否开启:
systemctl status firewalld
放行 3306:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
查看是否成功:
firewall-cmd --list-ports
Ubuntu 使用 ufw
查看状态:
ufw status
放行端口:
ufw allow 3306/tcp
如果 ufw 没启用,可能还需要先开启:
ufw enable
5. 如果是云服务器,还要检查安全组
很多人卡在这一步。
Linux 本机和防火墙都设置好了,但云服务器还有一层“安全组”。
需要开放:
- TCP 3306
建议做法:
- 只放行自己的 Windows 公网 IP
- 不建议直接对全网开放 3306
如果你是在阿里云、腾讯云、华为云、AWS、Azure 上部署,记得去控制台里检查安全组规则。
6. Windows 端连接方法
Windows 上可以用两种方式连:
方法一:图形化工具
常用工具:
- Navicat
- DBeaver
- HeidiSQL
- SQLyog
填写参数一般包括:
- 主机名 / IP:Linux 服务器 IP
- 端口:3306
- 用户名:
winuser - 密码:你刚设置的密码
- 数据库:可选
示例
如果 Linux 服务器公网 IP 是 123.123.123.123:
- Host:
123.123.123.123 - Port:
3306 - User:
winuser - Password:
你的强密码
方法二:Windows 命令行连接
先确认 Windows 已安装 MySQL 客户端,或者直接用自带的 mysql.exe。
mysql -h 123.123.123.123 -P 3306 -u winuser -p
回车后输入密码。
如果连接成功,就会进入 MySQL 交互界面。
7. 常见报错与解决办法
报错 1:ERROR 2003 (HY000): Can't connect to MySQL server on ...
常见原因:
- MySQL 没启动
- 3306 没监听
- 防火墙没放行
- 安全组没开
- IP 填错
排查顺序:
- Linux 上看服务是否运行
- 看是否监听 3306
- 看防火墙
- 看云安全组
- 看 Windows 填的 IP 是否正确
报错 2:Access denied for user ...
常见原因:
- 用户名密码错
- 用户没有远程权限
- Host 不匹配
处理方法:
重新检查用户授权,尤其是:
SELECT user, host FROM mysql.user;
确认是不是 winuser@%。
如果不是,可重新授权:
CREATE USER 'winuser'@'%' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON testdb.* TO 'winuser'@'%';
FLUSH PRIVILEGES;
报错 3:连接超时
常见原因:
- 3306 被拦截
- 安全组未放行
- 路由器 / NAT 转发问题
- 服务器 IP 不可达
检查方法:
Windows 上可以先测试端口是否通:
Test-NetConnection 123.123.123.123 -Port 3306
如果 TcpTestSucceeded : False,说明端口没通。
8. 更安全的连接方式:SSH 隧道
如果你不想直接暴露 3306,推荐用 SSH 隧道。
这样 MySQL 不需要对公网开放,安全性更高。
适合场景
- 服务器在公网
- 不想把 3306 暴露给外网
- 只想自己电脑临时连接数据库
原理
Windows 先连 Linux 的 SSH 22 端口,
再通过隧道转发到 Linux 本地的 MySQL 3306。
Navicat / DBeaver 设置 SSH 隧道
填写:
- SSH 主机:Linux 服务器 IP
- SSH 端口:22
- SSH 用户名:root 或普通 sudo 用户
- SSH 密码 / 密钥:按实际填写
- MySQL 主机:
127.0.0.1 - MySQL 端口:
3306
优点
- 不需要开放 3306 到公网
- 比直接暴露数据库更安全
9. 推荐的安全配置
如果是正式环境,不建议这么做:
GRANT ALL PRIVILEGES ON *.* TO 'winuser'@'%' WITH GRANT OPTION;
更安全的方式是:
- 只开放指定数据库
- 限制来源 IP
- 使用强密码
- 尽量用 SSH 隧道
- 不要长期开放 root 远程登录
例如,只允许某个 Windows IP 访问:
CREATE USER 'winuser'@'你的Windows公网IP' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON testdb.* TO 'winuser'@'你的Windows公网IP';
FLUSH PRIVILEGES;
这样更稳。
10. 一次性快速检查清单
如果你想最快排查,可以按这个顺序走:
Linux 端
- MySQL 是否启动
- 是否监听 3306
bind-address是否为0.0.0.0- 是否有远程用户权限
- 防火墙是否放行 3306
- 云安全组是否放行 3306
Windows 端
- IP 是否正确
- 端口是否写 3306
- 用户名密码是否正确
- 是否需要 SSL 或 SSH 隧道
三、注意事项
-
不要直接把 root 开放给公网 安全风险很高,容易被爆破。
-
生产环境优先用 SSH 隧道 既安全又省心。
-
只开放必要端口 不要为了图省事把整台服务器全部端口放开。
-
注意 MySQL 版本差异 MySQL 8 和 5.7 在认证插件上有差别,老客户端可能连不上。
如果工具太旧,可能需要改认证方式或升级客户端。 -
Windows 本地防火墙一般不是重点 多数连接失败是 Linux 端、防火墙、安全组、权限问题,不是电脑坏了。
四、最实用的标准配置示例
下面给你一个可直接套用的配置思路。
Linux MySQL 配置
[mysqld]
bind-address = 0.0.0.0
port = 3306
MySQL 授权
CREATE USER 'winuser'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON testdb.* TO 'winuser'@'%';
FLUSH PRIVILEGES;
防火墙放行
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
Windows 连接参数
- 主机:Linux IP
- 端口:3306
- 用户:winuser
- 密码:StrongPass123!
五、总结
Windows 连接 Linux MySQL,本质上就是把这四件事配通:
- MySQL 允许远程监听
- 用户有远程登录权限
- Linux 防火墙和云安全组放行端口
- Windows 连接参数正确
只要按“服务状态 → 监听地址 → 用户权限 → 防火墙 → 安全组 → 客户端参数”这个顺序排查,基本都能解决。
如果想更安全,优先使用 SSH 隧道,不要长期裸露 3306 到公网。

还没有评论,来说两句吧...