У меня есть сервер Node.JS, который использует MySQL для подключения к моей базе данных. Теперь я использую пул соединений для повторного использования открытых соединений, когда они доступны. В настоящее время мой конфиг в Node.JS выглядит следующим образом:
var pool = mysql.createPool({
connectionLimit: 10,
host: DB_HOST,
user: DB_USER,
password: DB_PASS,
database: DB_BASE,
ssl : {
ca : fs.readFileSync('******'),
key : fs.readFileSync('******'),
cert : fs.readFileSync('******'),
},
charset : 'utf8mb4',
dateStrings: true
})
Однако мой сервер, работающий на компьютере Linux с 2 ГБ ОЗУ и 2 виртуальными ЦП, теперь настроен на тайм-аут после 300 с (my.cnf):
wait_timeout = 300
interactive_timeout = 300
Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я думаю, что из-за этого пула соединений я только освобождаю соединение, а не закрываю или завершаю его. Это дает мне много ошибок в моем файле error.log из MySQL, например:
2019-06-30T11:08:59.749390Z 1485 [Note] Aborted connection 1485 to db: 'DBNAME' user: 'server' host: 'XXX.XXX.X.XX' (Got timeout reading communication packets)
Я предполагаю, что это происходит, потому что соединение все еще открыто (освобождено, но открыто) и затем не используется в течение следующих 5 минут (300 с), поэтому мой сервер закрывает его автоматически. Это правильное предположение, или я совершенно не прав здесь, и я должен искать решение в другом месте?
Однако, если я прав, могу ли я как-то это предотвратить или это ошибка / предупреждение не имеет большого значения? Я думал об увеличении времени ожидания до 8 часов, так как это значение по умолчанию, или, возможно, в Node.JS есть способ, которым я не знаю, чтобы закрыть соединение, если оно не используется, например, в течение 4 минут, но я хотел бы услышать некоторые мнения об этом, прежде чем что-либо менять.
ура!