Nodejs + MySQL ReConnect

'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);
    });
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值