【发布时间】: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