我对光亮和R非常新,但是使用闪亮的我试图连接到数据库从那里获取数据。当我尝试在浏览器上连续访问我的RShiny工作时,出现了Cannot allocate a new connection: 16 connections already opened
之类的错误。我怎样才能克服这个错误或RShiny一次只能期待16个用户?我在这里有另一个堆栈帖子RStudio Shiny Error mysqlNewConnection maximum of 16 connections,但上述网址上的说明并不清楚。
答案 0 :(得分:42)
每次在代码中发送查询时,可能会使用obj <- dbConnect(...)
打开一个新的数据库连接。您可以在查询执行后每次在您创建的对象上调用dbDisconnect(obj)
来终止相应的连接。
此外,您可以使用此功能立即终止所有打开的连接:
library(RMySQL)
killDbConnections <- function () {
all_cons <- dbListConnections(MySQL())
print(all_cons)
for(con in all_cons)
+ dbDisconnect(con)
print(paste(length(all_cons), " connections killed."))
}
我建议在闪亮的外面写一个小函数来处理整个打开和关闭的事情:
library(RMySQL)
sqlQuery <- function (query) {
# creating DB connection object with RMysql package
DB <- dbConnect(MySQL(), user="youruser", password='yourpassword', dbname='yourdb', host='192.168.178.1')
# close db connection after function call exits
on.exit(dbDisconnect(DB))
# send Query to btain result set
rs <- dbSendQuery(DB, query)
# get elements from result sets and convert to dataframe
result <- fetch(rs, -1)
# return the dataframe
return(result)
}
希望有所帮助!
答案 1 :(得分:7)
如果遇到此问题,应首先以交互方式运行以下代码,以断开与MySQL数据库的所有连接:
lapply(dbListConnections(MySQL()), dbDisconnect)
(请注意,如果您使用其他数据库管理系统,则可以使用其他DBI驱动程序替换MySQL()。
只需在RStudio上重启R session:command/ctrl + shift + F10
你需要告诉闪亮的如何正确断开连接。那部分取决于用例。如果每次开始闪亮时都开始连接,可以在server.ui
内添加:
session$onSessionEnded(function(){
dbDisconnect(con)
}
con是你的联系。 如果每次运行查询时都启动了连接,则必须在查询运行后立即断开连接。
您还应该查看闪亮团队pool
包$select1 = Select-String -Pattern "Final result:" -Path $filePath |
Out-File D:\temp\pattern.txt
来管理连接。
关于数据库的suggested还有一个非常有用的部分。
答案 2 :(得分:1)
dbDisconnect()在我的情况下不起作用。所以我从终端停止了MySQL服务器并再次开始使用
sudo service mysql stop
sudo service mysql start
然后我使用dbDisconnect()运行代码,现在它正在为我工作。