Воспроизвести ошибку MySQL: сервер закрыл соединение (node.js)
я пытаюсь воспроизвести ошибку MySQL I 'я вижу в моем приложении node.js на EC2 сбиблиотека mysql для узла:
Соединение потеряно: сервер закрыл соединение.
Я не могу воспроизвести ошибку локально - мой код обрабатывает базу данных очень хорошо - она просто перепроверяется каждые несколько секунд и повторно подключается к базе данных после перезапуска. На EC2 это происходит около 4 утра по тихоокеанскому времени, но БД все еще работает и работает нормально.
хотел бы
Воспроизведите сбой с моим локальным MySQLДобавьте любую нужную логику в мой вспомогательный модуль mysql, чтобы справиться с этимВот'Ошибка в моем приложении node.js:
2012-10-22T08: 45: 40.518Z - ошибка: uncaughtException date = Пн 22 октября 2012 08:45:40 GMT + 0000 (UTC), pid = 14184, uid = 0, gid = 0, cwd = / home / ec2 -user / my-app, execPath = / usr / bin / nodejs, версия = 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], время работы = 3238343.511107486, трассировка = [столбец = 13, файл = / home / ec2-пользователь / my-- 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, нативный = false, столбец = 20, файл = events.js, функция = Socket.emit, строка = 88, метод = emit, нативный = false, столбец = 51, файл = net.js, функция = 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. emit (events.js: 88: 20), в TCP.onread (net.js: 388: 51)]
Вот'Мой код (вспомогательный модуль 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;
};