Closed
Description
Hi all,
I have a big issue where I randomly get ECONNRESET every 1-5 minutes when using mysql / mysql2 npm package. ( Works fine up until this point )
Environment
mysql server
running in docker, mapped to host port 3306node server
running within docker, talking to mysql via host_ip:3306
Error
data-server-container | Error: read ECONNRESET
data-server-container |
data-server-container | - net.js:622 TCP.onread
data-server-container | net.js:622:25
Fix attempts
I've tried all sorts to try and get the connection to remain - including
Using pools
const mysql = require('mysql');
const connection = mysql.createPool({
connectionLimit: 10,
host: process.env.DB_HOST_DOCKER,
user: process.env.DB_USER_DOCKER,
password: process.env.DB_PASSWORD_DOCKER,
database: process.env.DB_DATABASE,
});
query = (sql) => {
return new Promise(async (resolve, reject) => {
connection.getConnection(function (err, poolConnection) {
if (err) throw err; // not connected!
// Use the connection
poolConnection.query(sql, function (error, results, fields) {
if (error) reject(error)
resolve(results);
// When done with the connection, release it.
poolConnection.release();
})
})
})
}
Creating a new connection on every request! ( Somehow this still gets ECONNRESET! )
query = (sql) => {
const mysql = require('mysql');
const connection = mysql.createConnection({
host: process.env.DB_HOST_DOCKER,
user: process.env.DB_USER_DOCKER,
password: process.env.DB_PASSWORD_DOCKER,
database: process.env.DB_DATABASE,
});
return new Promise(async (resolve, reject) => {
connection.query(sql, (error, results) => {
if (error) {
reject(error);
}
resolve(results);
});
}
}
- Sending a ping to the connection every 10 seconds
- Checking my wait_timeout is high enough on mysql server ( 28800 as expected )
I'm running out of ideas here it's stopping me being able to use this in production :(
My best assumption after trying all the above is there an issue with the TCP Keep-Alive on the socket perhaps that is only triggered when running node / mysql within docker ( I stumbled on this MR - could this be a solution? #2110 )
Metadata
Metadata
Assignees
Labels
No labels