Воспроизвести ошибку 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;
};

Ответы на вопрос(5)

Ваш ответ на вопрос