本文要解决什么问题:当远程服务器无法开放MySQL端口或者无权限操作远程服务器的安全组时,我们应该如何在本地连接到远程的MySQL并进行操作
本文基础要求:远程服务器至少开放了SSH端口(通常默认情况下端口号为22),如果未开放22端口,则本文所述方法并不可用。
本文方法总结:利用SSH自带的端口映射功能,建立一个tunnel,将远程服务器上的MySQL端口映射到本地的端口上,从而使得本地客户端可以直接连接
关于如何使用SSH,以及如何更简单的使用SSH,可以参考另一篇文章
当SSH已经准备就绪,打开Terminal,输入如下指令
ssh -L [local port]:[database host]:[remote port] [username]@[remote host]
ssh -L [本地端口]:[数据库所在地址]:[数据库远程端口] [远程服务器用户名]@[远程服务器地址]
*
如果你不用同时登陆远程服务器进行操作,可以加上-N
指令
以上指令唯一需要解释的就是数据库所在地址,如果远程服务器本身就是MySQL服务器,那么可以直接填127.0.0.1
, 而如果远程服务器本身还是一个跳板,则应该输入在远程服务器内可以访问到MySQL的地址。
示例如下:
ssh -N -L 3310:127.0.0.1:3306 root@MyRemote
以上的命令会将远程服务器监听3306端口的MySQL服务,映射到本地的3310端口上,之后可以直接使用MySQL客户端在命令行里登录,或者使用pma等数据库操作工具
mysql -u root -h 127.0.0.1 -P 3310 -p