mysql - RStudio Shiny 错误 mysqlNewConnection 最多 16 个连接

标签 mysql r shiny

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

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

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

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

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

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

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

 on.exit(dbDisconnect(dbcon))

因此,页面本身的代码仅在我保持连接打开时才对我有效,我想这可能会导致上述最大连接数错误。

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

最佳答案

您可以在 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)
}

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

关于mysql - RStudio Shiny 错误 mysqlNewConnection 最多 16 个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649673/

相关文章:

r - 有没有办法在 R Shiny 应用程序加载时自动验证对 GoogleSheets 的访问? Googlesheets4 身份验证问题

mysql - 在一个数据库中查询/连接 1000 多个 mySQL 表

performance - 循环 ggplots 以创建动画 : increasing speed

r - 使用 R 的 Twitter 挖矿 (twitteR + tm) : error using tolower conversion

html - 更改 actionButton 及其标签的大小

javascript - 如何强制将 Shiny 的输入大写

PHP MySqli - 如果为 0,则减去和添加并回显

php - MySQL WHERE 条件是否将括号视为与 PHP 相同?

jquery - 在jquery中不显示结果详细信息mysql

regex - 用空格替换尾随句号