我对闪亮和R非常新,但使用闪亮我试图连接到数据库从那里获取数据。当我尝试访问浏览器中的RShiny工作时,我得到了一个如Cannot allocate a new connection: 16 connections already opened
的错误。我如何克服这个错误,或者Rshine一次只能期待16个用户?我在这里有另外一个帖子RStudio Shiny Error mysqlNewConnection maxinum of 16 connections,但在上面的url中解释不清楚。无法分配新连接:已连接16个连接RMySQL
11
A
回答
30
也许您每次在代码中发送查询时都会打开一个与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
dbDisconnect()在我的情况下不起作用。所以,我已经从终端停止MySQL服务器,并使用
再次启动sudo的服务mysql的停止
sudo的服务mysql的启动
然后我跑的代码使用dbDisconnect()现在它的工作对我来说。
1
如果你这个问题,你应该先运行下面的代码交互到所有CONNEXIONS断开与MySQL数据库:
lapply(dbListConnections(MySQL()), dbDisconnect)
(请注意,您可以通过另一个DBI驱动程序替换MySQL的(),如果你使用另一个数据库管理系统)。
然后,你需要明确如何正确断开连接。这部分取决于用例。如果你每次启动时闪亮启动联接,您可以添加内部server.ui
:
session$onSessionEnded(function(){
dbDisconnect(con)
}
其中con是你的Connexion公司。 如果每次运行查询时都启动连接,则必须在查询运行后立即断开连接。
您还应该看看pool
包装是由闪亮的团队suggested管理连接。 数据库上还有一个关于Shiny Articles的非常有用的部分。
相关问题
- 1. 已连接但无法连接的Wifi
- 2. 无法重新连接到ODBC连接
- 3. “无连接,无连接”连接
- 4. 无法连接无线网络连接套接字连接
- 5. HttpURLConnection连接方法无法连接
- 6. 无法连接
- 7. 无法断开连接并重新连接套接字(C++,winsock2)
- 8. PHP连接分配
- 9. 连接池 - 无连接
- 10. URL连接 - 无连接
- 11. 无法连接到Facebook连接
- 12. python3 unotools连接错误无法连接
- 13. 无法连接提供给iTunes连接
- 14. SQL三连接:无法三连接
- 15. 无法通过websocket连接连接
- 16. 无法连接RPC连接 - Simplecoin,Pushpool
- 17. paho中的MQTT无法连接连接
- 18. cqlsh连接错误:无法连接到
- 19. SSH连接无法断开连接
- 20. 无法将Java连接到CONNX:java.sql.SQLException:连接被拒绝:连接
- 21. 连接被拒绝:连接,无法连接数据库mysql
- 22. 无法连接到SOCKS代理:连接被拒绝:连接
- 23. 连接的数据库无法连接进行连接
- 24. Crashlytics连接被拒绝 - 连接失败无法连接到api.crashlytics.com
- 25. 无法从传输连接读取数据:连接已关闭
- 26. VSTS:无法读取传输连接的数据:连接已
- 27. 无法连接到MySQL的C#,连接已打开错误
- 28. 无法链接/连接UIScrollView?
- 29. :db.error /连接释放连接已在Datomic
- 30. 连接池已达到连接
您是否需要* 16个连接同时打开,或者您在寻找一种方法来关闭未使用的连接?如果是前者,[这篇博客文章](http://fransvandunne.com/2015/07/allow-for-more-than-16-rmysql-connections-in-r/)似乎提供了一个解决方案。 – nrussell
在'shinyServer'之前打开一个连接并始终使用此连接。 –