2013-07-07 14 views
9

Come da my question earlier today, sospetto di avere un problema con connessioni non chiuse che impediscono l'inserimento di dati nel mio database MySQL. I dati sono consentiti in tabelle che non sono attualmente in uso (quindi sospetto che molte connessioni aperte impediscano il caricamento in quella particolare tabella).Chiusura delle connessioni attive utilizzando RMySQL

Sto utilizzando RMySQL su server Ubuntu per caricare dati su un database MySQL.

Sto cercando un modo per a) determinare se le connessioni sono aperte b) chiuderle se lo sono. Il comando exec sp_who e exec sp_who2 dalla riga di comando sql restituisce un errore di codice sql.

Un'altra nota: Sono in grado di connettersi, completare il processo di caricamento e terminare correttamente il processo R, e non ci sono dati sul server (controllati tramite la riga di comando sql) quando provo solo quella tabella.

(BTW:? Se tutto il resto fallisce, sarebbe semplicemente cancellando la tavola e la creazione di uno nuovo con lo stesso nome risolvere il problema che sarebbe stato un bel dolore, ma fattibile.)

Grazie per il vostro aiuto!

+1

Si potrebbe provare 'spettacolo ricco processlist;' per vedere il connessioni aperte. – cryo111

risposta

12

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

b. dbDisconnect(dbListConnections(dbDriver(drv = "MySQL"))[[index of MySQLConnection you want to close]]). Per chiudere tutto: lapply(dbListConnections(dbDriver(drv = "MySQL")), dbDisconnect)

Sì, si potrebbe semplicemente riscrivere la tabella, ovviamente si perderebbero tutti i dati. Oppure puoi specificare dbWriteTable(, ..., overwrite = TRUE).

Vorrei anche giocare con le altre opzioni, come row.names, header, field.types, quote, sep, eol. Ho anche avuto un comportamento strano in RMySQL. Non riesco a ricordare le specifiche, ma sembra che non ho avuto alcun messaggio di errore quando ho fatto qualcosa di sbagliato, come dimenticare di impostare row.names. HTH

10

Chiudere tutte le connessioni attive:

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

esecuzione: dbDisconnectAll()

1

Chiusura di una connessione

È possibile utilizzare dbDisconnect() insieme a dbListConnections() per scollegare le connessioni RMySQL è la gestione:

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

Controllare tutti i collegamenti sono stati chiusi

dbListConnections(MySQL()) 

Si potrebbe anche uccidere qualsiasi connessione che si è permesso di (non solo quelli gestiti da RMySQL):

dbGetQuery(mydb, "show processlist") 

Dove mydb è ..

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

chiudere una particolare connessione

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

più semplice:

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

Lista tutti i collegamenti e disinserirli lapply

Problemi correlati