RMySQL:RS_DBI_getConnection 中的内部错误:连接句柄损坏

cul*_*lan 5 r rmysql shiny

所以我一开始就很好地连接到了我的数据库:

con <- dbConnect(
MySQL(),
user = "username", password = "password",
host = "<my amazon web service database server>",
port = 3306
)
Run Code Online (Sandbox Code Playgroud)

所以一切正常,但在我的 Shiny 应用程序上运行/刷新几次后,它说我有 16 个打开的连接,并且我无法再打开任何连接。

所以,我尝试运行:

dbDisconnect(dbListConnections(MySQL()))
Run Code Online (Sandbox Code Playgroud)

然后我得到了这个:

dbListConnections(MySQL())
[[1]]TRUE
Run Code Online (Sandbox Code Playgroud)

然后我得到这个错误:

Error in .local(dbObj, ...) : 
internal error in RS_DBI_getConnection: corrupt connection handle
Run Code Online (Sandbox Code Playgroud)

现在,每当我尝试打开闪亮的应用程序时,我都会在数据表输出上收到错误

(I query the database to generate this output):
internal error in RS_DBI_getConnection: corrupt connection handle
Run Code Online (Sandbox Code Playgroud)

New*_*ser 4

我刚刚遇到了同样的问题。这就是我解决它的方法:

我正在创建一个连接,然后创建一些使用该连接的函数。问题是,连接位于外部范围内:

con <- dbConnect(
  MySQL(),
  ...
)

MyFunction <- function(){
  myQuery <- paste("SELECT * FROM ...")
  df <- dbGetQuery(con, myQuery)
  df
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这也工作得很好,但在“16”连接限制之后停止工作,就像你的情况一样(相同的损坏连接处理错误)。

解决方法

在函数内部创建连接并在函数结束时断开连接:

MyFunction <- function(){

  con <- dbConnect(
    MySQL(),
    ...
  )

  myQuery <- paste("SELECT * FROM ...")
  df <- dbGetQuery(con, myQuery)

  dbDisconnect(con)
  df
}
Run Code Online (Sandbox Code Playgroud)

现在一切似乎都正常。