Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSH连接到R中的MySQL数据库_Mysql_R_Ssh_Rmysql - Fatal编程技术网

SSH连接到R中的MySQL数据库

SSH连接到R中的MySQL数据库,mysql,r,ssh,rmysql,Mysql,R,Ssh,Rmysql,我想使用RMySQL包来查询数据库。在R脚本中使用dbConnect()和dbGetQuery()之前,我通常在mac终端中键入ssh-website.com 我的数据库位于防火墙后面,只能在本地访问,据我所知,需要通过ssh连接 是否可以在R中完成整个过程 我尝试了system('ssh-website.com'),但没有成功 谢谢是的,您可以在R中完成整个过程,如下所示: library(RMySQL) ## Making connection to your MySQL db con &

我想使用RMySQL包来查询数据库。在R脚本中使用
dbConnect()
dbGetQuery()
之前,我通常在mac终端中键入
ssh-website.com

我的数据库位于防火墙后面,只能在本地访问,据我所知,需要通过ssh连接

是否可以在R中完成整个过程

我尝试了
system('ssh-website.com')
,但没有成功


谢谢

是的,您可以在R中完成整个过程,如下所示:

library(RMySQL)

## Making connection to your MySQL db
con <- dbConnect(MySQL(),
     user="user id", password="your password",
     dbname="my_db", 
     host="localhost", ## if db is hosted locally else enter your server address instead of localhost
     port = 3306  ## Check your port for MySQL
     )

### if your db is hosted on server then you enter ip address of server in host
## your query
rs = dbSendQuery(con, "select * from some_table")

## fetching data from the query
data = fetch(rs, n=-1)
库(RMySQL)
##与MySQL数据库建立连接

con您需要在系统和ssh服务器之间建立一个端口转发

将以下内容添加到
~/.ssh/config
文件中:

Host mysql-tunnel-website.com
  LocalForward 3306 localhost:3306
为此,我强烈建议使用SSH密钥。很好。我不是R编码员,但R可能不喜欢在
system()调用中以交互方式输入密码,而SSH密钥(无密码或添加到SSH代理时)则会消除这种需要

现在,您应该能够在R中启动隧道:

system('ssh-f mysql tunnel-website.com')
这将把website.com的localhost端口3306映射到端口3306上ssh客户端的localhost,允许您在ssh客户端系统上运行与在远程website.com系统上相同的代码

您的R代码需要指向
host=localhost
port=3306
(这应该是默认值)


如果website.com的localhost没有为远程SQL server提供端口3306,只需将
localhost:3306
更改为与website.com可访问的端口相对应的
server:port
组合即可。如果您无法在ssh客户端系统上使用端口3306(可能您正在本地运行MySQL?),您可以通过将第一个
3306
更改为任何其他端口(我倾向于前缀一个数字,如
13306
),然后确保指定备用端口(例如
port=13306
)在你的R代码中。

@Joesph我的答案对你有帮助吗?@Santosh没有,我需要建立一个SSH连接。通常我会在终端上完成,但我想知道是否有一种方法可以在R中完成。你们可以在R中完成。看看我的答案。它告诉您如何在R中执行此操作。@Santosh抱歉,我这里肯定遗漏了一些内容,但如果不先建立SSH隧道,我甚至无法建立连接。本地(drv,…)中出现错误:无法连接到数据库:错误:无法连接到“127.0.0.1”(57)上的MySQL服务器。
以下链接可能会有所帮助