Я пытаюсь воспроизвести ошибку MySQL, которую я вижу в моем приложении node.js на EC2 с node библиотекой mysql:
Соединение потеряно: сервер закрыл соединение.
Я не могу воспроизвести ошибку, локально убивая базу данных, обрабатывая мой код очень просто - он просто перечитывает каждые несколько секунд и снова подключается к db после его перезапуска. На EC2 это происходит примерно в 4 часах Тихого океана, но db все еще работает и работает нормально.
Я хотел бы
- Воспроизводите сбой с моей локальной mysql
- Добавьте любую логику, которая мне нужна в моем вспомогательном модуле mysql для обработки этого
Здесь ошибка в моем node.js приложении:
2012-10-22T08: 45: 40.518Z - ошибка: uncaughtException date = Mon Oct 22 2012 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/ec 2-user/my-app/app.js, --my-app], rss = 15310848, heapTotal = 6311392, heapUsed = 5123292, loadavg = [0.0029296875, 0.0146484375, 0.04541015625], время безотказной работы = 3238343.511107486, trace = [column = 13, Файл =/дом/ec2 пользователь/мой-приложение/node_modules/mysql/lib/protocol/Protocol.js, function = Protocol.end, line = 63, method = end, native = false, column = 10, file = stream.js, function = Socket.onend, строка = 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.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;
};