[nodejs]解决mysql和连接池(pool)自动断开问题

 最近在做一个个人项目,数据库尝试使用了mongodb、sqlite和mysql。分享一下关于mysql的连接池用法。项目部署于appfog,项目中我使用连接池链接数据库,本地测试一切正常。上线以后,经过几次请求两个数据接口总是报503。一直不明就里,今天经过一番排查终于顺利解决了。

 

1.mysql 链接普通模式

 

mysql的普通用法如下所示:

复制代码

  var mysql = require('mysql'),

      env = {
        host : 'localhost',
        user : 'root',
        password : '2212',
        database : 'image_marker'
      };

    db = mysql.createConnection(env);
    db.connect();

    exports.do = function (sql, callback) {

      db.query(sql, callback);

    }

复制代码

MySQL中有一个名叫wait_timeout的变量,表示操作超时时间,当连接超过一定时间没有活动后,会自动关闭该连接,这个值默认为28800(即8小时)。关于普通用法链接丢失后重新链接,请看这里 传送门

 

2.使用连接池

之前我的错误代码,官网上只给出了连接池用法,但是没有给出和请求结合的实例。由于欠缺经验,我认为多个请求使用一个connection比较节省资源。后面发现,connetion经过一段时间后会自动断开,这样问题就出现了。

复制代码

pool.getConnection(function (err, connection){
    exports.do = function (sql, callback){
        
        connection.query(sql, function (){
            callback.apply(connection, arguments);
            connection.release();
        });
    }
})

复制代码

google/baidu后发现了一个使用pool的实例

发现他的代码每一次请求都用pool创建一个connection,改进我的代码终于解决了一段时间后connection自动断开的问题。

 

正确代码为

复制代码

pool  = mysql.createPool(env);

    exports.do = function (sql, callback){
        this.getConnection(function (err, connection){
            connection.query(sql, function (){
                callback.apply(connection, arguments);
                connection.release();
            });
        })
    }.bind(pool)

复制代码

为每一个请求都建立一个connection使用完后调用connection.release(); 直接释放资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Node.js中创建MySQL连接池,可以使用`mysql`模块的`createPool()`方法来实现。首先需要引入`mysql`模块,然后使用`createPool()`方法来创建连接池对象。连接池对象可以设置一些连接参数,如主机名、端口号、用户名、密码、数据库名以及连接数限制等。以下是一个创建MySQL连接池的示例代码: ```javascript const mysql = require("mysql"); // 创建数据库连接池 const pool = mysql.createPool({ host: "localhost", // 主机名 port: 3306, // 端口号 user: "root", // 用户名 password: "123456", // 密码 database: "info", // 数据库名 connectionLimit: 20, // 连接数限制 }); // 将数据库连接池对象导出 module.exports = pool; ``` 上述代码中,我们使用`mysql.createPool()`方法创建了一个连接池对象,其中指定了主机名为localhost,端口号为3306,用户名为root,密码为123456,数据库名为info,并设置了连接数限制为20。最后通过`module.exports`将连接池对象导出,以便在其他文件中使用。 这样,我们就成功创建了一个Node.js的MySQL连接池连接池可以在应用程序中复用连接,提高数据库访问的效率和性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Node.js实现MySQL数据库连接池](https://blog.csdn.net/m0_46612221/article/details/123128118)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [NodeJs使用mysql.createPool连接池](https://blog.csdn.net/aexwx/article/details/128736028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值