点滴记录
自古成功在尝试。

NODE学习笔记七-mysql长时间未响应断连解决问题

把之前cms项目,上传到服务器后,发现一问题:每次清晨打开无法访问,到服务器上查看了log,发现是数据库连接出错。。由于搁置,知道一周后今天才来解决这个人。唉,懒呀!

在搜索引擎的带领,我了解到问题出在mysql上,因为MySQL中有一个名叫wait_timeout的变量,表示操作超时时间,当连接超过一定时间没有活动后,会自动关闭该连接,这个值默认为28800(即8小时)。解决这个问题有两个方法,一个采用连接池,一个采用短线重连。由于之前没有采用连接池,这里先贴上断线重连的方法。

function handleError (err) {
    if (err) {
        // 如果是连接断开,自动重新连接
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
            connection().content;
        } else {
            console.error(err.stack || err);
        }
    }
}
//建立连接
const connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'cx'
});

connection.connect(handleError);

//当连接出错时
connection.on('error', handleError);

还有一种使用连接池的方法:

const mysql = require('mysql');
const pool = mysql.createPool({
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'cx'
});

pool.getConnection(function (err, conn) {
    if (err) console.log("POOL ==> " + err);
    const selectData = function(){
        let selectSQL = 'select * from admin limit 10';
        conn.query(selectSQL,function(err,rows){
            if (err) console.log(err);
            console.log("SELECT ==> ");
            for (var i in rows) {
                console.log(rows[i]);
            }
            conn.release();
        });
    }
    selectData();
});
未经允许不得转载:日常笔记 » NODE学习笔记七-mysql长时间未响应断连解决问题

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址