2013-07-07 67 views
9

根據my question earlier today,我懷疑我有一個未封閉連接的問題,它阻止了將數據注入到我的MySQL數據庫中。數據被允許進入當前沒有被使用的表格中(因此我懷疑有許多打開的連接會阻止上傳到特定的表格中)。使用RMySQL關閉活動連接

我在Ubuntu服務器上使用RMySQL將數據上傳到MySQL數據庫。

我正在尋找一種方法來a)確定連接是否打開b)如果它們是關閉它們。命令exec sp_whoexec sp_who2從sql命令行返回一個sql代碼錯誤。

另一個注意事項:我能夠連接,完成上傳過程併成功結束R過程,並且當我僅嘗試該表時,服務器上沒有數據(通過sql命令行檢查)。

(順便說一句:如果一切都失敗了,只會刪除表並創建一個新的具有相同名稱的解決,那將是一個相當痛苦,但是是可行的。)

感謝您的幫助!

+1

你可以試試'顯示完整的processlist;'看打開連接。 – cryo111

回答

12

a。 dbListConnections(dbDriver(drv = "MySQL"))

b。 dbDisconnect(dbListConnections(dbDriver(drv = "MySQL"))[[index of MySQLConnection you want to close]])。關閉全部:lapply(dbListConnections(dbDriver(drv = "MySQL")), dbDisconnect)

是的,你可以重寫表格,當然你會失去所有的數據。或者你可以指定dbWriteTable(, ..., overwrite = TRUE)。

我也將與其他選項玩,像row.namesheaderfield.typesquotesepeol。我在RMySQL中也有很多奇怪的行爲。我不記得具體細節,但似乎我沒有錯誤信息,當我做錯了什麼,比如忘記設置row.names。 HTH

10

關閉所有活動連接:

dbDisconnectAll <- function(){ 
    ile <- length(dbListConnections(MySQL()) ) 
    lapply(dbListConnections(MySQL()), function(x) dbDisconnect(x)) 
    cat(sprintf("%s connection(s) closed.\n", ile)) 
} 

執行: dbDisconnectAll()

1

關閉連接

可以一起使用dbDisconnect()與dbListConnections()來切斷這些連接RMySQL正在管理:

all_cons <- dbListConnections(MySQL()) 
    for(con in all_cons) 
     dbDisconnect(con) 

檢查所有連接已被關閉

dbListConnections(MySQL()) 

你也可以殺了你被允許到任何連接(而不僅僅是那些RMySQL管理):

dbGetQuery(mydb, "show processlist") 

哪裏MYDB是..

mydb = dbConnect(MySQL(), user='user_id', password='password', 
         dbname='db_name', host='host') 

關閉特定的連接

dbGetQuery(mydb, "kill 2") 
    dbGetQuery(mydb, "kill 5") 
1

最簡單的:

lapply(dbListConnections(dbDriver(drv = "MySQL")), dbDisconnect) 

列出所有連接,並通過lapply它們斷開