【问题标题】:Accessing a MySQL database in R (RStudio) after tunneling via SSH通过 SSH 建立隧道后在 R (RStudio) 中访问 MySQL 数据库
【发布时间】:2016-06-14 08:38:48
【问题描述】:

我有以下问题。

背景:

  1. 我想连接到 MySQL 数据库并将表下载到 R 中。
  2. 数据库(MySQL 提示符)只能通过 SSH 隧道访问另一台服务器。
  3. 我在 MacBook Pro (2015) 上使用 Mac OSX El Capitan。

问题:

从“终端”,我可以轻松地通过 SSH 连接到服务器,然后进入 MySQL 提示符并运行我需要的查询。

但是,我无法在 RStudio 中执行后面的任务。

我试过的代码是:

> system('ssh -f <server_user>@<server_ip> -N sleep 20')       
> db <- dbConnect(MySQL(), host="hostname", user="username", pwd="password", dbname="databasename", port=3306)
> sql1 <- paste("SELECT * FROM databasename.tablename", sep="")
> results <- dbGetQuery(con, sql1)
> dbDisconnect(con)

虽然我可以从ps -A | grep ssh 看到 ssh 进程正在运行(我希望它运行 20 秒),并且在 R 中命令正常执行(不等待更多输入),但我无法连接到相关数据库.错误消息是“无法连接”的结果,并且 RStudio 在错误出现之前至少会挂起一分钟。

问题:

怎么做 (1) 结合使用SSH (2)远程服务器上的MySQL到 (3) 将表直接加载到 R 数据框中?

谢谢。

【问题讨论】:

    标签: mysql r


    【解决方案1】:

    您应该使用称为端口转发的东西。一些细节在这里(https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding) 例如,假设您想使用 SSH 隧道从笔记本电脑连接到 http://www.ubuntuforums.org。您将使用源端口号 8080(备用 http 端口)、目标端口 80(http 端口)和目标服务器 www.ubuntuforums.org。 :

    ssh -L 8080:www.ubuntuforums.org:80 <host>
    

    &lt;host&gt; 应替换为您的笔记本电脑的名称。

    这是为整台计算机完成的,因此您无需在 r studio 中执行此操作。

    当然,您需要将端口转发到 3036。但是您需要在服务器上具有特殊权限。因为在大多数主机上,您只能从本地主机连接(例如从 php)

    【讨论】:

    • 谢谢!这是否意味着 R 中的所有 MySql 命令(甚至是连接字符串)都会通过隧道?
    • 是的,因为 pory 转发是在系统层完成的,所以你发送到本地端口的所有内容都会发送到远程服务器
    • 很抱歉这个问题,但我怎么知道正确的本地端口?
    • 你指定本地端口号。唯一的规则应该是它应该是超过 1024 的数字(那些被系统使用)并且不应该用于其他应用程序。如果你在mysql上只有onr db你可以选择3036 ad很好
    • 非常感谢!这么好的答案。
    猜你喜欢
    • 2016-09-08
    • 2019-07-15
    • 2013-02-05
    • 2015-05-05
    • 2020-08-25
    • 2014-09-17
    • 2013-06-02
    • 2017-12-26
    • 2014-05-06
    相关资源
    最近更新 更多