'use strict'
var mysql = require('mysql');
//-----------线程池-----------
var pool = mysql.createPool({ connectionLimit : 100, //important host: 'x.x.x.x',
database: 'mydb',
user: 'local',
password: '******',
connectionLimit: 50, queueLimit: 0, waitForConnection: true});exports.select = function(sql,callback){ console.log("MYSQL.select..."); pool.getConnection(function(err,connection){
if (err) { console.log('select...error: '+ err.code); //res.json({"code" : 100, "status" : "Error in connection database"}); return callback(err); } console.log('connected as id ' + connection.threadId); connection.query(sql,function(err,rows){ connection.release();
if(!err) { //res.json(rows); } callback(err,rows); }); connection.on('error', function(err) { console.log('select...error: '+ err.code); //res.json({"code" : 100, "status" : "Error in connection database"}); return callback(err,rows);; });});};
//-----------单连接-----------
var config = {
host: 'x.x.x.x',
database: 'mydb',
user: 'local',
password: '******',
waitForConnection: true
};
var reConn = 0;//只允许一个线程执行重连
function handleError(connection) {
connection.on("error", function (error) {
console.error("error.code="+error.code);
if (error instanceof Error) {
if (error.code === "PROTOCOL_CONNECTION_LOST" || error.code ==='EHOSTUNREACH') {
if(reConn++<=1)
{
console.log("Lost connection. Reconnecting...");
setTimeout(function(){
getConnection(connection.config);
}, 2000);//两秒后重连
}
} else if (error.fatal) {
//throw error;
}
}
});
}
function getConnection(config) {
console.log("getConnection now...");
var connection = mysql.createConnection(config);
// Add handlers.
handleError(connection);
connection.connect();
return connection;
}
var client = getConnection(config);
exports.select = function(sql,callback){
console.log("db.select...");
client.query(sql,function(err,results){
if (err)
{
console.log(err);
client = getConnection(config);//会导致大量的连接
}else{
reConn=0;
}
callback(err,results);
});
};