Проверить соединение 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);
});
Ответы
Ответ 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 для некоторого тривиального значения