需求
1.想通过datagrip直接连接远程主机上的mysql。
困难
1.出于安全考虑,远程主机上的mysql 3306端口并没有对外开放,因此不能像本地连接数据库那么方便。
解决过程
1.在windows下通过xshell 建立ssh隧道连接数据库,即可将远程主机上的mysql端口进行映射到本地指定端口,这样与需要连接数据库时,都需要进行使用xshell登陆远程主机,否则数据库是连接不上的。
2.通过windows下的xshell,联想到在mac下通过ssh 登陆远程主机并将远程主机上的mysql 3306端口映射到本地的特定端口上,譬如47036。
ssh -i ./id_rsa.pub dev@xx.xxx.xx.xxx -p5837 -CfNg -L 127.0.0.1:47036:xx.xxx.xx.xxx:3306
通过上面命令即可将远程主机的3306端口映射到本地的47036端口。
3.在datagrip进行常规的数据库连接操作,如下图
会出现密码/账户不正确,尝试过自己所知道的所有密码和用户之后,还是依然提示这个页面。因此这个方法行不通,就另辟蹊径吧。(后面问了同事才知道是自己密码记错了,因此该方法还是可行的,但是缺点就是,每次连接数据库时,都需要使用ssh建立端口的转换,比较麻烦,因此推荐步骤4的方式连接)
4.既然使用Navicat进行ssh通道连接MySQL数据库,那么DataGrip应该也就可以。DataGrip通过ssh连接远程MySQL的方式如下图:
(1)先切到“SSH/SSL”页面,使用ssh连接上远程主机,如果登陆远程主机是私钥文件,则Auth type 选择 Key pair(OpenSSH or PuTTY)。(输入完成先不要点击 Test Connection)
(2)切回“General”页面,在该页面输入数据库相应的信息。注意:该页面上的填写的信息是基于远程主机的。因此Host是localhost而不是远程主机的外网ip。(点击Test Connection 即可)