Я подключился к базе данных mysql через пакет RMySQL, используя этот оператор:
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() возвращает пустой список, когда нет подключения к базе данных. Но в этом случае не возвращает пустой список.
Является ли поврежденный дескриптор соединения состоянием соединения, отличным от состояния отключения?
OR
Время соединения истекло?
Как лучше всего проверить, работает ли соединение с БД?