通过 SSH 隧道连接 MySQL 数据库教程
通常为了安全,MySQL 数据库并不会直接对外开放,而是通过跳板机(Bastion Host)或服务器提供访问。这时,我们可以使用 SSH 隧道 的方式来安全连接远程 MySQL。
一、前提条件
- 本地已安装 MySQL 客户端(如
mysql
命令) - 拥有远程服务器的 SSH 访问权限(用户名、主机名/IP、私钥或密码)
- 知道数据库的主机地址(通常是
localhost
或 127.0.0.1)和端口(默认 3306)注意这里IP是本地IP!不是远端Linux地址! - 拥有 MySQL 用户名和密码
二、建立 SSH 隧道的方式
方式一:使用命令行(推荐)
bash
ssh -L 3307:127.0.0.1:3306 username@remote_host
3307
:本地端口,可以是任意未被占用的端口127.0.0.1:3306
:远程服务器上 MySQL 的地址和端口username@remote_host
:远程服务器的 SSH 登录信息
此命令会将本地 3307
端口映射到远程服务器上的 127.0.0.1:3306
。执行后保持这个终端窗口打开。
三、连接 MySQL 数据库
在另一个终端中使用以下命令连接:
bash
mysql -h 127.0.0.1 -P 3307 -u mysql_user -p
-h 127.0.0.1
:连接本地的端口-P 3307
:上面建立的本地映射端口-u mysql_user
:MySQL 用户名-p
:提示输入 MySQL 密码
四、使用 SSH 私钥(可选)
如果使用私钥文件(如 .pem
)进行认证:
bash
ssh -i /path/to/private_key.pem -L 3307:127.0.0.1:3306 username@remote_host
五、使用图形化客户端(如 DBeaver / TablePlus)
创建一个新连接,数据库类型选择 MySQL
主机填写:
127.0.0.1
端口填写:
3307
用户名 / 密码:填写数据库账户
在 SSH 选项卡中填写:
- SSH 主机:
remote_host
- SSH 用户名:
username
- 私钥或密码:根据情况填写
- SSH 主机:
六、常见问题
- 端口冲突:如果本地
3307
已被占用,可以换成其他如3308
- 连接拒绝:确保你连接的是远程服务器本地的 MySQL(127.0.0.1:3306),不是公网 IP
- 防火墙限制:确保 SSH 端口(通常是 22)未被阻止