我正在尝试使用node mysql 库重现我在 EC2 上的 node.js 应用程序中看到的 MySQL 错误:
连接丢失:服务器关闭了连接。
我无法在本地重现该错误-我的代码可以很好地处理杀死数据库-它只是每隔几秒钟重新检查一次,并在重新启动后重新连接到数据库。在 EC2 上,它发生在太平洋时间凌晨 4 点左右,但数据库仍然正常运行。
我想
- 用我的本地 mysql 重现崩溃
- 在我的 mysql helper 模块中添加我需要的任何逻辑来处理这个
这是我的 node.js 应用程序中的错误:
2012-10-22T08:45:40.518Z - 错误:uncaughtException 日期=2012 年 10 月 22 日星期一 08:45:40 GMT+0000 (UTC),pid=14184,uid=0,gid=0,cwd=/home/ec2 -user/my-app, execPath=/usr/bin/nodejs, version=v0.6.18, argv=[/usr/local/bin/node, /home/ec2-user/my-app/app.js, - -my-app], rss=15310848, heapTotal=6311392, heapUsed=5123292, loadavg=[0.0029296875, 0.0146484375, 0.04541015625], uptime=3238343.511107486, trace=/[column=13, file=/ app/node_modules/mysql/lib/protocol/Protocol.js,function=Protocol.end,line=63,method=end,native=false,column=10,file=stream.js,function=Socket.onend,line= 80,方法=onend,native=false,column=20,file=events.js,function=Socket.emit,line=88,method=emit,native=false,column=51,file=net.js,function= TCP.onread, line=388, method=onread, native=false], stack=[错误:连接丢失:服务器关闭了连接。,
在 Protocol.end (/home/ec2-user/my-app/node_modules/mysql/lib/protocol/Protocol.js:63:13),在 Socket.onend (stream.js:80:10),在 Socket。在 TCP.onread (net.js:388:51) 处发出 (events.js:88:20)]
这是我的代码(mysql帮助模块):
module.exports = function (conf,logger) {
var mysql = require('mysql');
var connectionState = false;
var connection = mysql.createConnection({
host: conf.db.hostname,
user: conf.db.user,
password: conf.db.pass,
database: conf.db.schema,
insecureAuth: true
});
function attemptConnection(connection) {
if(!connectionState){
connection = mysql.createConnection(connection.config);
connection.connect(function (err) {
// connected! (unless `err` is set)
if (err) {
logger.error('mysql db unable to connect: ' + err);
connectionState = false;
} else {
logger.info('mysql connect!');
connectionState = true;
}
});
connection.on('close', function (err) {
logger.error('mysqldb conn close');
connectionState = false;
});
connection.on('error', function (err) {
logger.error('mysqldb error: ' + err);
connectionState = false;
/*
if (!err.fatal) {
return;
}
if (err.code !== 'PROTOCOL_CONNECTION_LOST') {
throw err;
}
*/
});
}
}
attemptConnection(connection);
var dbConnChecker = setInterval(function(){
if(!connectionState){
logger.info('not connected, attempting reconnect');
attemptConnection(connection);
}
}, conf.db.checkInterval);
return connection;
};