我對閃亮和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'之前打開一個連接並始終使用此連接。 –