Подтвердить что ты не робот

Проверить соединение mysql в sequelize

У меня есть очень простая программа, в которой я создаю экземпляр Sequelize, а затем выполняю необработанный запрос в базе данных mysql. Дело в том, что при запуске и запуске MySql проблем нет, я могу выполнить запрос без проблем. Но когда MySql не запускается, запрос не выдаёт никаких ошибок до тех пор, пока тайм-аут запроса не достигнет, а затем он допустит ошибку ETIMEOUT. Но это не совсем то, что происходит. Я ожидаю, что запрос испустит ошибку ENOTFOUND или что-то подобное, если mysql не запущен, поэтому я могу управлять ошибкой и выполнять разные действия, если Mysql опустился, или Mysql очень занят и имеет очень большое время отклика. Что я делал, чтобы проверить, запущен ли Mysql, и не нужно ждать исключения тайм-аута.

sequelize = new Sequelize(db_name, db_user, db_pass, opts);

sequelize.query('SELECT * FROM some_table').success(function(result) {
  console.log(result);
}).error(function(err) {
  console.log(err);
});
4b9b3361

Ответ 1

Начиная с последней версии Sequelize (т.е. 3.3.2), authenticate может для проверки соединения:

var sequelize = new Sequelize("db", "user", "pass");

sequelize.authenticate().then(function(errors) { console.log(errors) });

authenticate просто запускает запрос SELECT 1+1 AS result для проверки соединения db.

Ответ 2

В .then вы не увидите ошибок, таких как ошибки проверки подлинности пароля.

Из документа для продолжения здесь:

Вы можете использовать функцию .authenticate(), подобную этой, чтобы проверить соединение.

sequelize
  .authenticate()
  .then(function(err) {
    console.log('Connection has been established successfully.');
  })
  .catch(function (err) {
    console.log('Unable to connect to the database:', err);
  });

Ответ 3

Пожалуйста, проверьте системную переменную "wait_timeout", если она была reset для некоторого тривиального значения