我想使用RMySQL包来查询数据库。我通常在我的mac终端中输入ssh website.com
,然后在R脚本中使用dbConnect()
和dbGetQuery()
。
我的数据库位于防火墙后面,只能在本地访问,据我所知,需要进入ssh。
是否可以在R中完成整个过程?
我已经尝试system('ssh website.com'))
但没有成功
由于
答案 0 :(得分:1)
是的,您可以在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)
另外,请浏览一些有用的博客以获取更多信息:
博客1:https://www.r-bloggers.com/accessing-mysql-through-r/
博客2:https://www.r-bloggers.com/mysql-and-r/
答案 1 :(得分:1)
您需要在系统和ssh服务器之间建立一个前向端口。
将以下内容添加到~/.ssh/config
文件中:
Host mysql-tunnel-website.com
LocalForward 3306 localhost:3306
我强烈建议使用SSH密钥。 Github's SSH key guide非常好。我不是R编码员,但R可能不喜欢在system()
调用中交互式输入密码的需要和SSH密钥(当无密码或添加到ssh-agent时)消除了这种需要。
现在你应该能够在R中启动隧道:
system('ssh -f mysql-tunnel-website.com')
这会将website.com的localhost端口3306映射到端口3306上的ssh客户端本地主机,允许您在ssh客户端系统上运行与远程网站上相同的代码。 com系统。
您的R代码需要指向host=localhost
和port=3306
(这应该是默认值)。
如果远程SQL服务器不是由website.com的本地主机端口3306提供服务,只需将localhost:3306
更改为相对于可从中访问的server:port
组合的3306
组合。 website.com。如果您无法在ssh客户端系统上使用端口3306(也许您在本地运行MySQL?),您可以通过将第一个13306
更改为任何其他端口来转发到其他端口(我倾向于为port=13306
之类的数字添加前缀,然后确保在R代码中指定备用端口(例如response_url
)。