SSH连接到R中的MySQL数据库
我想使用RMySQL包来查询数据库。在R脚本中使用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 &
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服务器。
以下链接可能会有所帮助