【问题标题】:SSH Tunnel with R error: Failed to connect to database: Error: Can't connect to MySQL server on '127.0.0.1' (115)带有 R 错误的 SSH 隧道:无法连接到数据库:错误:无法连接到“127.0.0.1”上的 MySQL 服务器 (115)
【发布时间】:2022-01-13 04:01:27
【问题描述】:

我正在尝试连接到需要 SSH 密钥的远程数据库。我在 Ubuntu 20 上运行 Shiny Server。以下 sn-p 在 R 解释器中工作,但在我的 Shiny 应用程序中失败。

library(RMySQL)
library(callr)

setwd('/folder/to/pemfile')

rs <- r_session$new(wait = TRUE, wait_timeout = 3500)

rs$call(function(){
  session <- ssh::ssh_connect("<user-name>@<ip-address>", keyfile = "myfile.pem", verbose = FALSE)

  ssh::ssh_tunnel(session, port=3307, target="127.0.0.1:3306")
})

conn <- dbConnect(MySQL(), user='<db-user>', password='<db-password>', dbname='<db-name>', port=3307, host='127.0.0.1')


query <- "<insert-query-here>"    
result <- dbSendQuery(conn, query)
data_df <- fetch(result, n = -1)

# Close Remote Session.
rs$close()

setwd('/path/to/original/folder')

我从 Shiny 应用收到的错误消息是

    Error in .local(drv, ...) : 
  Failed to connect to database: Error: Can't connect to MySQL server on '127.0.0.1' (115)
Calls: runApp ... ..stacktraceon.. -> dbConnect -> dbConnect -> .local
Execution halted

从其他帖子中,我尝试将 MySQL 服务器绑定地址从 127.0.0.1 更改为 0.0.0.0,但返回相同的错误。此外,我尝试使用 localhost 而不是 127.0.0.1,但是对于解释器和 Shiny App 都失败,并出现访问被拒绝错误。我倾向于这是 Shiny 安装的一个问题,因为它在逐行运行时从 R 终端工作。

Ubuntu机器上运行的MySQL版本

mysql  Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

R 包版本

> packageVersion('RMySQL')
[1] ‘0.10.22’
> packageVersion('callr')
[1] ‘3.7.0’
>
> packageVersion('shiny')
[1] ‘1.7.1’
>

【问题讨论】:

    标签: mysql r shiny ssh-tunnel rmysql


    【解决方案1】:

    我不确定我是否会将其称为“修复”,但 Shiny 应用程序在我执行以下操作后工作

    Sys.sleep(1) # <- Added this line before the line below
    conn <- dbConnect(MySQL(), user='<db-user>', password='<db-password>', dbname='<db-name>', port=3307, host='127.0.0.1')
    

    我通过从浏览器运行 Shiny 应用程序并复制/粘贴到 R 解释器中来找到这个解决方案,但都失败了。

    但是,当我将代码复制/粘贴到终端中,然后手动运行连接线时,它按预期工作,所以我添加了一条睡眠线并且它工作了。

    如果有人有其他解释,我会很好奇。

    编辑:我得出结论,错误的原因是因为 ssh_tunnel 在运行 dbConnect() 之前没有足够的时间建立连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2010-12-13
      • 2018-10-23
      • 2016-09-03
      • 1970-01-01
      相关资源
      最近更新 更多