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

2023-10-29

        最近在做一个个人项目,数据库尝试使用了mongodb、sqlite和mysql。分享一下关于mysql的连接池用法。项目部署于appfog,项目中我使用连接池链接数据库,本地测试一切正常。上线以后,经过几次请求两个数据接口总是报503。一直不明就里,今天经过一番排查终于顺利解决了。
1.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小时)。对于这种普通连接的方式,在正式线上可能会遇到连接丢失的问题(No reconnection after connection lost错误日志),上github上看了下文档和issues,上面说到连接丢失后不会自动重新连接,会触发error事件。 所以可以使用下面这种方法来避免连接对视问题:

function handleError (err) {
  if (err) {
    // 如果是连接断开,自动重新连接
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {
      connect();
    } else {
      console.error(err.stack || err);
    }
  }
}

// 连接数据库
function connect () {
  db = mysql.createConnection(config);
  db.connect(handleError);
  db.on('error', handleError);
}

var db;
connect();

 
2.使用连接池
 
对于丢失连接的问题,可以使用连接池(最新版mysql模块,用mysql.createPool()来创建的pool,当触发了connection的error事件时,会把该connection对象从连接池中移除。)
var mysql = require('mysql');
var pool  = mysql.createPool(config);

pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // And done with the connection.
    connection.end();

    // Don't use the connection here, it has been returned to the pool.
  });
});

参考:https://cnodejs.org/topic/51cd3bcc73c638f3705998f5


使用了连接池后,有网友说每一次请求都用pool创建一个connection,改进我的代码如下连接:

http://www.2cto.com/kf/201404/292016.html

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs解决mysql和连接池(pool)自动断开问题 的相关文章

随机推荐

  • keyshot场景素材导入_KeyShot导入Rhino室内场景渲染的详细方法

    在KeyShot怎样导入Rhino室内场景渲染呢 下面就为大家分享KeyShot导入Rhino室内场景渲染的图文教程 有需要的可以来了解了解哦 KeyShot导入Rhino室内场景渲染的详细方法 1 打开一个rhino场景 这是一个简单的室
  • powershell 脚本启动优化

    需求分析 powershell 启动慢的主要原因是 profile中的终端配置加载时间长 当我们打开powershell终端进行交互时 加载时间长 尚可忍受 但当我们的脚本 执行powershell脚本时 较长的加载时间 是不可接受的 优化
  • 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java动物爱心救助平台s9dza

    如果你自己基础不好或者是小白的情况下那就建议你选择网站 系统类的去做 但是还得问问你们导师 如果你们导师没问题就可以 因为有的导师是不愿意你们选择做网站 系统的 毕竟做的人比较多 重复率调高 选择这种题目都是要创新功能 所以会比较棘手 以下
  • RT-Thread动态和静态创建线程

    上一篇 RT Thread线程管理教程 http t csdn cn phnwQ 目录 一 静态创建线程和动态创建线程的区别 二 创建线程的常用函数 三 动态创建线程 四 静态创建线程 五 动态和静态创建线程结合 线程调度hook函数使用
  • 计算机科学与技术专业课程有哪些,计算机科学与技术专业课程有哪些

    计算机科学与技术专业简介 计算机科学与技术类专业毕业生的职业发展路线基本上有两条路线 一是纯技术路线 二是由技术转型为管理的路线 计算机科学与技术专业课程 电路原理 模拟电子技术 数字逻辑 数字分析 计算机原理 微型计算机技术 计算机系统结
  • Python——模拟退火在背包问题上的运用(详细代码)

    一 模拟退火简介 二 详细代码 import math import random import matplotlib pyplot as plt def init population n 生成一个种群 个体为全排列的随机排列 popul
  • [每日两题系列]刷算法题咯~~

    今日题目 反转链表 环形链表II 本系列所选题目均来自力扣或者牛客网站 所选题目主要是以其中的简单题为主 中等题为辅 包含少数困难题 原因是 本人目前能力还不够 开展这个系列的目的是督促自己 在暑假的时间里也要保持有一定的刷题量 拒绝摆烂
  • 测试用例(边界值法)

    1 什么是边界值法 有效数据和无效数据的分界点 往往作为程序员编写程序的判断点 是程序员容易犯错的地方 也是测试人员重点测试的内容 我们把这些分界点的值找到 并进行测试的方法 称为边界值法 2 边界值法应用的场合 1 有数据输入的地方 一般
  • 【毕业设计】基于M5Stack UnitV2的手写识别计算器的设计与制作

    目录 一 简介 二 设计原理 三 系统设计 四 注意点 五 困难 一 简介 耗时五个月 终于完成了毕业设计和毕业答辩 在这里记录一下学习与实现过程 题目是导师给的 这是主要任务和工作内容 利用M5Stack UnitV2的目标检测功能 用摄
  • Java中final 关键字

    final在Java中并不常用 然而它却为我们提供了诸如在C语言中定义常量的功能 不仅如此 final还可以让你控制你的成员 方法或者是一个类是否可被覆写或继承等功能 这些特点使final在Java中拥有了一个不可或缺的地位 也是学习Jav
  • python下载文件损坏_Python爬虫,图片下载完后是损坏的,怎么解决?

    coding utf 8 import requests from bs4 import BeautifulSoup import os import sys reload sys sys setdefaultencoding utf8 爬
  • Unknown column 'rownum' in 'where clause'解决方案

    Unknown column rownum in where clause 当在嵌套的查询语句里面用到rownum的时候会遇到这个问题 比如 SELECT FROM select t id t name from USER INFO t w
  • 矩阵的等价,相似,合同

    转自http blog csdn net abraham li article details 50058123 矩阵等价 定义 对同型矩阵A B 存在可逆阵P和Q 使得B PAQ 充要条件 A和B的秩相等 两个矩阵对应着两个不同的线性变换
  • [大话设计模式C++版] 第8章 雷锋依然在人间 —— 工厂方法模式

    源码可以在这里找到 大话设计模式C 版 模拟大学生学雷锋 main cpp class LeiFeng public void Sweep cout lt lt 扫地 lt lt endl void Wash cout lt lt 洗衣 l
  • Redis高可用方案--sentinel(哨兵模式)和集群

    redis高可用方案 sentinel 哨兵模式 和集群 一 redis高可用方案 sentinel 哨兵模式 哨兵模式简介 sentinel工作过程 关于sentinel的三个定时任务 sentinel网络 sentinel网络故障修复原
  • 坐得越久 死得越快 还是站着编程吧

    导读 一项对超过 20 万个澳大利亚人的研究结果给这样一个事实又增加了一份活体证明 坐得越久的人死得越快 研究同时还发现 锻炼不能改变这种趋势 尽管它能有效降低这种风险 老话题了 研究显示 久坐对你的健康是真的 真的 真的非常有害 请买一个
  • STM32 最简单的边沿触发脉冲计数程序

    include led h include delay h include key h include sys h include usart h include timer h include lcd h extern u8 sign e
  • 2.JVM自动内存管理

    2 自动内存管理 2 1 概述 Java与C 之间有一堵由内存动态分配和垃圾收集技术所围成的高墙 墙外面的人想进去 墙里面的人却想出来 C 需要对构建的每个对象的生命周期进行管理和维护 Java把对象的生命周期 内存管理 交给了JVM 简化
  • 重磅来袭!怎么用java编写app软件

    前言 本人是底层 211 本科 刚毕业 科研经历 但是有些项 经历 在国内监控行业某头部企业做过一段时间的实习 想着投下字节 可以积累 下 试经验和为金九银十面招做准备 投了简历之后 过了一段时 间 HR 就打电话跟我约时间 说明一下 我投
  • nodejs解决mysql和连接池(pool)自动断开问题

    最近在做一个个人项目 数据库尝试使用了mongodb sqlite和mysql 分享一下关于mysql的连接池用法 项目部署于appfog 项目中我使用连接池链接数据库 本地测试一切正常 上线以后 经过几次请求两个数据接口总是报503 一直