web-dev-qa-db-ja.com

新しい接続を割り当てることができません:16個の接続がすでにRMySQLを開いています

私はshinyとRに非常に新しいですが、shinyを使用して、そこからデータを取得するデータベースに接続しようとしています。ブラウザでRShinyの作業に継続的にアクセスしようとすると、Cannot allocate a new connection: 16 connections already opened。このエラーやRShinyが一度に16人のユーザーしか期待できない場合、どうすれば解決できますか?ここに別のスタックポストがあります RStudio Shiny Error mysqlNewConnection maximum 16 connections しかし、上記のURLの説明は明確ではありませんでした。

20
anoop

コードでクエリを送信するたびに、obj <- dbConnect(...)で新しいDB接続を開く可能性があります。作成したオブジェクトで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)
}

お役に立てば幸いです!

45
ThankGoat

迅速なソリューション

この問題が発生した場合は、まず次のコードをインタラクティブに実行して、MySQLデータベースへのすべての接続を切断する必要があります。

lapply(dbListConnections(MySQL()), dbDisconnect)

(別のデータベース管理システムを使用している場合は、MySQL()を別のDBIドライバーに置き換えることができます)。

より高速なソリューション

Rセッションを再起動するだけです:command/ctrl + shift + F10 RStudioで

この問題を回避する方法

適切に切断する方法を光沢のある方法で伝える必要があります。その部分はユースケースに依存します。輝くたびに接続を開始する場合は、server.ui

session$onSessionEnded(function(){
    dbDisconnect(con)
}

Conはあなたの接続です。クエリを実行するたびに接続を開始する場合、クエリの実行後すぐに切断する必要があります。

また、接続を管理するために、光沢のあるチームによって 推奨 であるpoolパッケージを見てください。データベースに関する Shiny Articles に関する非常に役立つセクションもあります。

10
Kevin Zarca

私の場合、dbDisconnect()は機能していませんでした。だから私は端末からMySQLサーバーを停止し、再び使用を開始しました

須藤サービスmysql停止

Sudoサービスmysqlの開始

次に、dbDisconnect()を使用してコードを実行しました。

1
Dipanwita Das