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

所以我在开始时连接到我的数据库就好了:

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

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

所以,我试着跑:

dbDisconnect(dbListConnections(MySQL()))

然后我得到了这个:

dbListConnections(MySQL())
[[1]]TRUE

然后我收到了这个错误:

Error in .local(dbObj, ...) : 
internal error in RS_DBI_getConnection: corrupt connection handle

现在,每当我尝试打开我的Shiny应用程序时,我都会在datatableoutput上得到错误

(I query the database to generate this output):
internal error in RS_DBI_getConnection: corrupt connection handle

最佳答案 我刚才有同样的问题.这就是我解决它的方式:

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

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

MyFunction <- function(){
  myQuery <- paste("SELECT * FROM ...")
  df <- dbGetQuery(con, myQuery)
  df
}

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

解决方法

在函数内部创建连接并在函数末尾断开连接:

MyFunction <- function(){

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

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

  dbDisconnect(con)
  df
}

现在一切似乎都在起作用.

点赞