博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql链接超时错误
阅读量:6279 次
发布时间:2019-06-22

本文共 3380 字,大约阅读时间需要 11 分钟。

最近在学习node.js是发现在MySQL连接时出现问题,当过几个小时没有访问的MySQL的时候,MySQL自动断开连接,这个问题的原因是MySQL有一个wait_time当超过这个时间的时候连接会丢失,当你再去请求MySQL的时候会连接不上MySQL服务。先在整理一下解决这两个问题的方法:

一、先看抛出的异常: 

MySQL连接丢失

二、第一中解决方法:当MySQL连接丢失时会抛出一个异常,这个异常的code就是‘PROTOCOL_CONNECTION_LOST’当捕捉的这个异常的时候就执行重新连接,这样就能解决连接丢失的问题:将这个连接封装成全局module,取名为‘mysqlconnection.js’代码如下:

var mysql = require('mysql');var mysql_config = {    host: '127.0.0.1', user:'root', password:'123456', database:'workstation' }; function handleDisconnection() { var connection = mysql.createConnection(mysql_config); connection.connect(function(err) { if(err) { setTimeout('handleDisconnection()', 2000); } }); connection.on('error', function(err) { logger.error('db error', err); if(err.code === 'PROTOCOL_CONNECTION_LOST') { logger.error('db error执行重连:'+err.message); handleDisconnection(); } else { throw err; } }); exports.connection = connection; } exports.handleDisconnection = handleDisconnection;

 

首先将这个连接封装成一个module,然后向外导出连接的方法‘handleDisconnection’和‘connection’;在你需要的地方全局调用handleDisconnection方法,具体不多说了,怕暴露智商,这里要特别注意的是,在使用连接‘connection’的时候,这个‘connection’不能作为全局变量,应该在每一次执行数据请求的时候去获取,不然不能获取到最新的‘connection’。

二,使用连接池,同样将连接封装成module,取名为‘mysqlpool.js’代码如下:

var mysql=require("mysql");var pool = mysql.createPool({    host: '127.0.0.1', user:'root', password:'123456', database:'workstation' }); var query=function(sql,options,callback){ pool.getConnection(function(err,conn){ if(err){ callback(err,null,null); }else{ conn.query(sql,options,function(err,results,fields){ //事件驱动回调 callback(err,results,fields); }); //释放连接,需要注意的是连接释放需要在此处释放,而不是在查询回调里面释放 conn.release(); } }); }; module.exports=query;

这里同样要注意的是释放连接问题‘ conn.release();’现在网上能查的这个问题的解决方法的释放连接这行代码都放错位置了,害的我一直解决不了办法,他们是将释放连接这个问题放到上面代码中第一个注释//事件驱动回调 

callback(err,results,fields);这个的前面,这个写法是错误的,这个写法会发生的错误就是在你不停的请求10来次之后,发现连接不上了。所以,释放连接应该放在‘conn.query’之后,执行查询完之后再释放连接才是正确的!!!,所以要想上面代码中的写法才不会出错!

 

附另一篇解决代码:

var db_config = {  host: 'localhost',    user: 'root',    password: '',    database: 'example'};var connection;function handleDisconnect() {  connection = mysql.createConnection(db_config); // Recreate the connection, since                                                  // the old one cannot be reused.  connection.connect(function(err) {              // The server is either down    if(err) {                                     // or restarting (takes a while sometimes).      console.log('error when connecting to db:', err);      setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,    }                                     // to avoid a hot loop, and to allow our node script to  });                                     // process asynchronous requests in the meantime.                                          // If you're also serving http, display a 503 error.  connection.on('error', function(err) {    console.log('db error', err);    if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually      handleDisconnect();                         // lost due to either server restart, or a    } else {                                      // connnection idle timeout (the wait_timeout      throw err;                                  // server variable configures this)    }  });}handleDisconnect();

 

 

版权声明:本文为博主原创+参考文章,转载请注明出处。 https://blog.csdn.net/wb_001/article/details/79000522

转载于:https://www.cnblogs.com/BlingSun/p/9321628.html

你可能感兴趣的文章
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>
《算法基础:打开算法之门》一3.4 归并排序
查看>>
高德开放平台开放源代码 鼓励开发者创新
查看>>
《高并发Oracle数据库系统的架构与设计》一2.5 索引维护
查看>>
《Exchange Server 2010 SP1/SP2管理实践》——2.4 部署外部网络环境
查看>>
Firefox 是 Pwn2own 2014 上攻陷次数最多的浏览器
查看>>
阿里感悟(十八)- 应届生Review
查看>>
《计算广告:互联网商业变现的市场与技术》一第一部分 在线广告市场与背景...
查看>>
话说模式匹配(5) for表达式中的模式匹配
查看>>
《锋利的SQL(第2版)》——1.7 常用函数
查看>>