MySQL Server имеет переменную с именем interactive_timeout
, это означает, что если ваше соединение не используется в течение X секунд, сервер закроет соединение.
Вы можете немного увеличить это значение, но предпочтительным способом является подтверждение тайм-аута и просто использовать новое соединение из пула, если вам нужно что-то запросить.
См. https://github.com/mysqljs/mysql#error-handling
Пул соединений не предотвращает тайм-ауты, но пул гарантирует, что у вас всегда есть соединение или несколько соединений, если ваше приложение находится под большой нагрузкой. Если у вас очень мало трафика, вам даже не понадобится несколько соединений, следовательно, вам даже не понадобится пул соединений.
Время ожидания каждого соединения в пуле истекает, поскольку использование release()
не закрывает соединение, а возвращает его в пул.
Так что ваши разъединения вполне нормальны, и вы должны правильно обработать ошибку.
Соединения воссоздаются автоматически, см. https://github.com/mysqljs/mysql#poolcluster-options
canRetry (Default: true)
If true, PoolCluster will attempt to reconnect when connection fails.
Как вы правильно обрабатываете ошибку?
Подготовить общий обработчик ошибок для всех ошибок MySQL:
// Above:
mySqlErrorHandler = function(error) {
if (error.code == '') { // <---- Insert in '' the error code, you need to find out
// Connection timeout, no further action (no throw)
} else {
// Oh, a different error, abort then
throw error;
}
}
// In the function:
connection.on('error', mySqlErrorHandler);
Вам нужно узнать error.code
за время ожидания. Это можно сделать с помощью console.log(error.code);
.