He estado usando nodemon y siempre para mantener en funcionamiento mi aplicaci贸n Node.js respaldada por MySQL. Tuve un peque帽o problema en el que la aplicaci贸n se bloqueaba despu茅s de 24-36 horas con MySQL cerrando la conexi贸n. Simplemente asum铆 que se deb铆a a una mala codificaci贸n de mi parte, pero realmente no sab铆a d贸nde estaba mi error hasta ahora …
exports.getData = function getData(what, callback) {
pool.getConnection(function(err, connection) {
connection.on('error', function(err) {
console.log(err); // 'ER_BAD_DB_ERROR'
});
var sql = "SELECT * FROM table WHERE column = '" + what + "'";
connection.query(sql, function(err, rows) {
connection.on('error', function(err) {
console.log(err); // 'ER_BAD_DB_ERROR'
});
callback(rows);
});
connection.release();
});
}
Este c贸digo funciona, no todo el tiempo, pero el 99% de las veces funciona muy bien.
Resulta que el problema es d贸nde estaba liberando la conexi贸n …
exports.getData = function getData(what, callback) {
pool.getConnection(function(err, connection) {
connection.on('error', function(err) {
console.log(err); // 'ER_BAD_DB_ERROR'
});
var sql = "SELECT * FROM table WHERE column = '" + what + "'";
connection.query(sql, function(err, rows) {
connection.on('error', function(err) {
console.log(err); // 'ER_BAD_DB_ERROR'
});
connection.release(); //Here is where it should be.
callback(rows);
});
//Not Here
});
}
Estaba volviendo a llamar a otras funciones, que a veces en s铆 mismas eran devoluciones de llamada o realizaban otras tareas de larga duraci贸n y nunca liberaban la conexi贸n.
Ya que ten铆a un grupo de conexiones, deber铆a haber estado liberando la conexi贸n cuando termin茅 con eso … imagina eso.
** TL; DR **
Siempre levante sus juguetes cuando haya terminado con ellos.