windows连接linux mysql

老刘

Windows 连接 Linux 上的 MySQL:最稳妥的配置方法与排查思路

一、问题分析

很多人都会遇到这种情况:Linux 服务器上的 MySQL 已经装好了,但 Windows 电脑里用 Navicat、DBeaver、HeidiSQL,甚至命令行都连不上。
这类问题通常不是 MySQL 本身坏了,而是下面几个环节没配好:

  1. MySQL 默认只允许本机连接
  2. Linux 防火墙没放行 3306 端口
  3. MySQL 用户权限没开放远程登录
  4. MySQL 配置文件绑定了 127.0.0.1
  5. 云服务器安全组没开端口
  6. 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@localhost
  • test@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 填错

排查顺序:

  1. Linux 上看服务是否运行
  2. 看是否监听 3306
  3. 看防火墙
  4. 看云安全组
  5. 看 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;

更安全的方式是:

  1. 只开放指定数据库
  2. 限制来源 IP
  3. 使用强密码
  4. 尽量用 SSH 隧道
  5. 不要长期开放 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 隧道

三、注意事项

  1. 不要直接把 root 开放给公网 安全风险很高,容易被爆破。

  2. 生产环境优先用 SSH 隧道 既安全又省心。

  3. 只开放必要端口 不要为了图省事把整台服务器全部端口放开。

  4. 注意 MySQL 版本差异 MySQL 8 和 5.7 在认证插件上有差别,老客户端可能连不上。
    如果工具太旧,可能需要改认证方式或升级客户端。

  5. 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,本质上就是把这四件事配通:

  1. MySQL 允许远程监听
  2. 用户有远程登录权限
  3. Linux 防火墙和云安全组放行端口
  4. Windows 连接参数正确

只要按“服务状态 → 监听地址 → 用户权限 → 防火墙 → 安全组 → 客户端参数”这个顺序排查,基本都能解决。
如果想更安全,优先使用 SSH 隧道,不要长期裸露 3306 到公网。

文章版权声明:文章内容均来源于各大短视频平台搜集以及修改和删减新增,如有侵权或者违规,请联系站长进行删除,如需转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
验证码
评论列表 (暂无评论,4人围观)

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

目录[+]