You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:通过SSH隧道连接远程MySQL数据库的配置问题

SSH 隧道连接远程MySQL数据库问题排查与解决方案

你已经搞定了基础的SSH连接和本地/远程数据库访问,卡在SSH隧道这一步确实容易踩小坑,我给你梳理正确的配置步骤和常见问题排查点:


一、正确的SSH隧道创建命令

要把远程服务器的MySQL端口(默认3306)映射到本地端口,你需要用本地端口转发参数-L,具体命令如下:

ssh -i /Path_To_Key -L 3307:127.0.0.1:3306 user@IP_Server

参数解释:

  • -L 本地端口:远程数据库地址:远程数据库端口:这个格式是核心,意思是把本地的3307端口的请求,通过SSH隧道转发到远程服务器的127.0.0.1:3306(也就是远程服务器本地的MySQL服务)
  • 选3307作为本地端口是为了避免和本地MySQL的3306端口冲突,如果你本地没运行MySQL,也可以直接用3306

二、本地访问远程数据库的方式

隧道创建成功后,你在本地用MySQL客户端连接时,要指向刚才映射的本地端口,比如用命令行的话:

mysql -u 远程数据库用户名 -p -h 127.0.0.1 -P 3307

输入远程数据库的密码后,就能像访问本地库一样操作远程数据库了。

如果想用图形化客户端(比如Navicat、DataGrip),连接地址填127.0.0.1,端口填3307,账号密码用远程数据库的即可。


三、常见问题排查

如果还是连不上,你可以从这几个方向检查:

  • 远程MySQL绑定地址:登录远程服务器,查看MySQL配置文件(一般是/etc/my.cnf/etc/mysql/my.cnf)里的bind-address参数,如果是127.0.0.1是正常的(因为我们转发的就是远程本地的端口);如果绑定了特定IP,可能需要调整为0.0.0.0或者保留127.0.0.1(后者更安全)
  • 端口冲突:本地3307端口有没有被其他程序占用?可以用lsof -i :3307(Linux/macOS)或netstat -ano | findstr :3307(Windows)检查,换个没被占用的端口即可
  • 后台运行隧道:如果想让隧道在后台持续运行,不用一直开着终端,可以加-fN参数:
    ssh -i /Path_To_Key -fN -L 3307:127.0.0.1:3306 user@IP_Server
    
    -f让SSH后台运行,-N表示不执行远程命令,只做端口转发
  • 防火墙/安全组:虽然你能直接SSH连远程,但要确认远程服务器的iptables没有限制本地的3306端口(不过你直接在远程能访问MySQL,这个大概率没问题);本地防火墙有没有阻止3307端口的入站请求?

内容的提问来源于stack exchange,提问作者ZioTonio

火山引擎 最新活动