2013-10-17 12 views
12

Ho un programma molto semplice in cui creo un'istanza Sequelize e quindi eseguo una query non elaborata su un database mysql. Il caso è che quando MySql è attivo e funzionante non ci sono problemi, posso eseguire la query senza problemi. Ma quando MySql non è in esecuzione, la query non emette alcun errore fino al raggiungimento del timeout della query e quindi emette un errore ETIMEOUT. Ma non è proprio quello che sta succedendo. Prevedo che la query emetta un errore ENOTFOUND o qualcosa del genere se mysql non è in esecuzione in modo da poter gestire l'errore ed eseguire azioni diverse se Mysql è andato giù o Mysql è molto occupato e ha un tempo di risposta molto ampio. Che cosa ho fatto per verificare se Mysql è attivo e funzionante senza dover attendere l'eccezione di timeout.Verifica connessione mysql in sequenza

sequelize = new Sequelize(db_name, db_user, db_pass, opts); 

sequelize.query('SELECT * FROM some_table').success(function(result) { 
    console.log(result); 
}).error(function(err) { 
    console.log(err); 
}); 
+0

Si dovrebbe essere il monitoraggio dei server MySQL in modo che sia tutto il tempo, non scrivere codice dell'applicazione che è inutilmente paranoico. Un timeout è il comportamento corretto per il server inattivo e la connessione non riuscita. È possibile aumentare il valore di timeout se è troppo lento. – tadman

+0

bene in caso di paranoia, anche se il server MySQL è attivo e la query emette un errore, a causa del sovraccarico, è inutile dire che è necessaria una migliore infrastruttura di database, è possibile utilizzare il server di cache come Redis, per risposte più veloci, ma se tutte le tue query sono come quelle del tuo esempio, allora non è scritto con le prestazioni in mente, voglio dire, per 10.000 righe potrebbe essere ok, ma per un milione di righe interrogate ogni 5sec o 10sec non va bene .. IMHO dovresti riprogettare e cercare approcci migliori in quello che stai facendo, scommetto che ce n'è uno migliore. – Gntem

risposta

20

partire dalla versione più recente di Sequelize (cioè 3.3.2), authenticate può essere utilizzato per controllare la connessione:

var sequelize = new Sequelize("db", "user", "pass"); 

sequelize.authenticate().then(function(errors) { console.log(errors) }); 

authenticate esegue semplicemente la query SELECT 1+1 AS result per verificare la connessione db.

0

Si prega di verificare variabile di sistema "wait_timeout" se il suo stato resettato ad un valore banale

3

Non vedrete errori, come errori di autenticazione della password, in .then.

Dalla documentazione sequelize here:

È possibile utilizzare la funzione .authenticate() in questo modo per testare la connessione .

sequelize 
    .authenticate() 
    .then(function(err) { 
    console.log('Connection has been established successfully.'); 
    }) 
    .catch(function (err) { 
    console.log('Unable to connect to the database:', err); 
    }); 
Problemi correlati