数据库
首页 > 数据库> > R脚本中的SSH进入MySQL数据库

R脚本中的SSH进入MySQL数据库

作者:互联网

我正在尝试连接到MySQL服务器,该服务器受连接到给定服务器的限制.我试图通过这个限制服务器连接,而没有物理连接.

通过命令行,这可以通过创建SSH连接来实现,之后我可以从命令行运行MySQL命令.例如:

ssh myUsername@Hostname
myUsername@Hostname's password:
[myUsername@Host ~]$mysql -h mySQLHost -u mySQLUsername -p mySQLPassword

但是,我希望从R内部连接到MySQL数据库,因此我可以发送查询以将表读入到当前的R会话中.通常我会在命令行中运行R会话,但服务器上没有安装R.

例如,当我物理连接到服务器(填充信息已更改)时,我有这段代码可用:

myDB <- dbConnect(MySQL(), user="mySQLUsername", password="mySQLPassword", dbname="myDbname", host="mySQLHost")

本质上,我想通过管道运行相同的命令,以便myDB对象是一个有效的mySQL连接.

我一直试图从R内部进入限制服务器,并且能够读取csv文件.例如:

dat <- read.table(pipe('ssh myUsername@Hostname "cat /path/to/your/file"'))

这会提示我输入我的密码,并且会读取该表(建议它为here).但是,我不确定如何将其转换为MySQL连接.例如,我应该将管道部分作为主机参数吗?这是我的第一个想法,但一直无法做到这一点.

任何帮助,将不胜感激.

解决方法:

我使用SSH隧道完成了与Postgres类似的任务.实际上,您正在使用SSH隧道执行的操作是“建立与远程服务器的连接,并将该服务器的端口作为本地计算机上的端口提供.”

您可以在本地计算机上使用以下命令设置SSH tunnel

ssh -L local_port:lochalhost:remote_port username@remote_host

具体来说,您正在使用此命令执行的操作是创建本地端口转发SSH隧道,该隧道将您连接的端口直接连接到安装了数据库的计算机上(remote_port),并将其安全地发送到您拥有的计算机上R安装在local_port上.

例如,对于具有以下选项的数据库服务器:

hostname: 192.168.1.3
username: mysql
server mysql port: 3306

您可以使用以下命令(在命令行中,或在使用system2的R中)创建到计算机上端口9000的隧道:

ssh -L 9000:localhost:3306 mysql@192.168.1.3

根据您在R中的确切DBI连接,您可能需要稍微编辑连接配置,以使其连接到新创建的隧道端口.我使用不同的localhost端口的原因是它可以防止与本地版本的数据库发生冲突(如果你有的话).

标签:r,linux,ssh,rmysql
来源: https://codeday.me/bug/20191005/1856117.html