我已经通过使用这一说法RMySQL包连接到MySQL数据库:如何检查通过RMySql连接到MySql是否存在?
con<-dbConnect(drv=RMySQL::MySQL(max.con=1,fetch.default.rec=500),host="host",dbname="dbname",password="psswd",user="user"))
到目前为止,没有任何问题。当我检查:
>class(con)
[1] "MySQLConnection"
attr(,"package")
[1] "RMySQL"
一个小时后,我用下面的语句:
dbGetQuery(conn=con,"show tables")
,我得到了一个错误:
Error in .local(dbObj, ...) :
internal error in RS_DBI_getConnection: corrupt connection handle
但是,如果我这个语句查询:
dbListConnections(drv=RMySQL::MySQL())
它给出了:
[[1]]
<MySQLConnection:0,21>
当我尝试:
dbDisconnect(conn=con)
我得到了同样的错误:
Error in .local(dbObj, ...) :
internal error in RS_DBI_getConnection: corrupt connection handle
然后我删除了连接对象:
rm(con)
当我试图连接再次使用dbConnect(),我得到这个错误:
con<-dbConnect(drv=RMySQL::MySQL(max.con=1,fetch.default.rec=500),host="host",dbname="dbname",password="psswd",user="user"))
Error in .local(drv, ...): Cannot allocate a new connection: 1 connections already opened
我知道dbListConnections()调用在没有连接到数据库时返回一个空列表。但在这种情况下不会返回空列表。
是在损坏的连接处理不同状态比断开状态连接的?
或
连接超时?
如果与数据库的连接仍在工作,最好的方法是保持检查状态?
保持连接打开这么久是非常非常严重的错误。您应该在完成使用后立即关闭连接。原因是任何事务,连接打开时获取的锁都会一直持续到关闭为止,导致严重的性能下降。只需关闭连接并在必要时打开它*仅在需要时 –
换句话说,如果您在其他人使用的数据库上这样做,您会收到来自DBA的紧急电话 –
@PanagiotisKanavos好吧。谢谢你指出这个错误。所以我应该认为这是我的一个执行错误,而不是包裹问题? – TUSHAr