MySQL 不开放外网端口,Mac 怎么连接?

0 阅读1分钟

MySQL 只允许服务器本机访问,在 Mac 上直接填写服务器 IP 和 3306,连接不通。想查询里面的数据,并不一定要把数据库端口开放到外网。

如果你能通过 SSH 登录这台服务器,可以用 DartShell 的本地端口转发建立通道,再让数据库连接指向 Mac 本机的端口。

下面以 MySQL 和 SSH 运行在同一台服务器为例:MySQL 监听服务器的 127.0.0.1:3306,Mac 使用 13306 作为访问入口。数据库示例为 demo_shop,查询账号为 demo_reader,请替换成自己的实际配置。

先分清这三个端口

用途

本例配置

在哪里填写

SSH 服务端口

使用已有 SSH 连接中的配置

SSH 服务器条目

Mac 本机入口

13306

转发规则、数据库连接

服务器 MySQL 端口

3306

转发规则的远程端口

SSH 端口不是数据库端口。 先确保 SSH 连接本身可用;服务器上的 MySQL 已运行;数据库账号也有读取目标库表的权限。13306 只是本例选择的空闲端口,不要求和远端的 3306 一样。

1. 建立本地转发,选好 SSH 服务器

在 DartShell 左侧进入「端口转发」,点击「添加规则」,给规则取名,例如「MySQL SSH 隧道」。

转发类型选择 「本地」,本机端口填写 13306,再选择能登录目标服务器的 SSH 配置。

本机端口填写 13306,并选择用于建立隧道的 SSH 服务器

本机端口填写 13306,并选择用于建立隧道的 SSH 服务器

本机端口是 Mac 上的访问入口;SSH 服务器选择自己的实际连接。

2. 填写服务器上的 MySQL 地址,保存并启动

继续向下查看转发设置,填写:

  • • 远程主机: 127.0.0.1
  • • 远程端口: 3306

远程主机填写 127.0.0.1,远程端口填写 3306

远程主机填写 127.0.0.1,远程端口填写 3306

这里的 127.0.0.1 指 SSH 服务器自身,因为本例的 MySQL 就运行在这台服务器上。

点击「保存」,回到规则列表并启动这条转发。确认规则处于运行状态,再配置数据库连接。

MySQL SSH 隧道规则已运行,右侧显示停止按钮

MySQL SSH 隧道规则已运行,右侧显示停止按钮

规则运行后,本机入口 13306 才能通过 SSH 到达服务器的 MySQL 端口。

3. 数据库连接填 Mac 本机地址

进入 DartShell 左侧的「数据库」,新建 MySQL 连接,填写数据库名称和账号信息。

  • • 连接名称: 远程 MySQL
  • • 主机地址: 127.0.0.1
  • • 端口: 13306
  • • 用户名: demo_reader
  • • 密码: 该 MySQL 账号的密码
  • • 数据库: demo_shop

这里填写的是 Mac 本机的 127.0.0.1:13306,不是服务器 IP,也不是远端 MySQL 的 3306。用户名和密码使用 MySQL 账号,与 SSH 登录账号分别对应。

MySQL 连接使用本机 127.0.0.1 和 13306,SSH 隧道开关关闭,使用 SSL 开启

MySQL 连接使用本机 127.0.0.1 和 13306,SSH 隧道开关关闭,使用 SSL 开启

本例先在「端口转发」中建立通道,因此数据库连接里的「SSH 隧道」保持关闭;「使用 SSL」按当前 MySQL 环境配置,本例保持开启。

看到「SSH 隧道」关闭,不代表连接没有经过 SSH。这条通道已经由前面启动的转发规则提供,不需要在数据库连接中重复建立。 MySQL 的 SSL 设置仍要单独检查,不能把 SSH 转发成功等同于数据库认证和加密设置一定正确。

填写完成后,可以点击「测试连接」,确认通过再保存;本例最终通过打开表读取数据来验证访问结果。

4. 打开表,验证数据确实能读到

连接数据库,展开 demo_shop → Tables → orders,打开表格。本例读取到 3 行演示订单,包含商品名、金额和状态。

远程 MySQL 的 orders 表返回三行数据

远程 MySQL 的 orders 表返回三行数据

能读取实际表数据,说明数据库连接已通过本地入口到达远端服务,并完成账号认证和读取。图中的记录是隔离环境里的演示数据。

此时的访问路径是:

Mac 上的数据库连接 → 本机 127.0.0.1:13306 → SSH 隧道 → 服务器 127.0.0.1:3306

本例的 MySQL 始终只监听服务器的回环地址,未改成对外监听;从客户端直接访问服务器 IP 的 3306 不可用,通过隧道则成功读到了表数据。

连接不通,沿这条路径排查

先看隧道是否运行。 仅保存规则还不够,确认已启动,并检查 SSH 服务器是否能够正常连接。

再核对两端地址。 转发规则的远程端口是服务器的 3306;数据库连接的端口是 Mac 的 13306。虽然两处都写 127.0.0.1,前者指服务器,后者指 Mac。若更换本机端口,数据库连接里的端口也要一起更新。

最后检查数据库这一层。 隧道建立后,MySQL 的账号、密码、目标库权限和 SSL 配置仍须有效。若提示认证或加密错误,应检查这些设置,而不是反复改转发端口。

使用结束后停止转发规则,后续通过它建立的数据库连接就无法继续访问远端服务。需要再次使用时,先启动规则,再连接数据库即可。