|-转 解决nodejs mysql Error: Connection lost The server closed the connection
nodejs连接mysql数据库一段时间(具体多长时间不知道是在哪里设置的)无操作会断开连接,导致后续执行sql时会报错:数据库服务器已经关闭了连接,为此用下面方法解决。 20241002
var mysqlConfig = { host : 'localhost', user : 'test', password : '123456', port: '3306', database: 'test' }; var connection = mysql.createConnection(mysqlConfig); connection.connect(); connection.on('error',err=>{ console.log('Re-connecting lost connection: '); connection = mysql.createConnection(mysqlConfig) }); ......
上面是我实测有效的方法 20241002
下面是转载的内容
Node连接MySql,会出现几分钟无动作则自动关闭连接,导致Node服务器Down掉。 报错信息: 解决方法:将sql文件修改为连接池的写法,查询语句也是。 参考链接:https://www.npmjs.com/package/mysql2 具体实现: 原连接写法(db.js):写法没错,但因为数据库无操作断开机制所以还是有问题。看了其他的博客,尝试做了异常处理,还是会出现报错。
const mysql = require("mysql"); const sqlConfig = { host: "localhost", user: "root", password: "root", database: "campus", }; var connection; function handleDisconnect() { connection = mysql.createConnection(sqlConfig); connection.connect(function (err) { if (err) { console.log("error when connecting to db:", err); setTimeout(handleDisconnect, 2000); } }); connection.on("error", function (err) { console.log("db error", err); if (err.code === "PROTOCOL_CONNECTION_LOST") { handleDisconnect(); } else { throw err; } }); } handleDisconnect(); export default handleDisconnect;
更改后使用连接池的写法:(db.js) ...
|--转 解决nodejs mysql Error: Connection lost The server closed the connection的两种方法
最近在学习node.js是发现在MySQL连接时出现问题,当过几个小时没有访问的MySQL的时候,MySQL自动断开连接,这个问题的原因是MySQL有一个wait_time当超过这个时间的时候连接会丢失,当你再去请求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’。...