RStudio Shiny Error mysqlNewConnection最多16个连接

时间:2014-07-09 09:13:57

标签: mysql r shiny

我运行了一个连接到MySQL数据库的闪亮服务器。到目前为止工作正常的页面现在给我这个错误:

Error in mysqlNewConnection(drv, ...) : RS-DBI driver: 
(cannot allocate a new connection -- maximum of 16 connections already opened)

这让我想知道如何在交互式网页中处理打开的mysql连接。

首先,dbConnect(MySQL(),...)语句应该在shinyServer方法之前还是在内部?

如果我在dbDisconnect(dbcon)末尾添加了server.R,那么我会从该页面收到Error: expired MysqLConnection错误,并且不会显示任何数据。

我在shinyServer方法内部或之前尝试过这个:

 on.exit(dbDisconnect(dbcon), add=TRUE)

 on.exit(dbDisconnect(dbcon))

因此,如果我打开连接,页面本身的代码只适用于我,我想这会导致上面的最大连接错误。

如何在Shiny中处理这些情况?

1 个答案:

答案 0 :(得分:8)

您可以在global.R文件中设置连接,或在shinyServer以外设置https://groups.google.com/forum/#!topic/shiny-discuss/0VjQc2a6z3M的示例:

library(RMySQL)

getConnection <- function(group) {

  if (!exists('.connection', where=.GlobalEnv)) {
    .connection <<- dbConnect(MySQL(), group=group)
  } else if (class(try(dbGetQuery(.connection, "SELECT 1"))) == "try-error") {
    dbDisconnect(.connection)
    .connection <<- dbConnect(MySQL(), group=group)
  }

  return(.connection)
}

这定义了一个检查全局环境中连接的函数。如果找不到,则会创建一个。如果找到一个但无法连接,则重新启动连接。没有给出明确的断开连接,所以我猜最终只允许连接超时。