2013-07-07 46 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它们断开