Mysql connection Pool Error: Can't add new command when connection is in closed state

При попытке сделать execute напрямую к pool возникает следующая ошибка:

Error: Can't add new command when connection is in closed state

До этого уже было выполнено несколько execute напрямую к pool.

Свойство объекта пула соединений pool._closed показывает, что пул не закрыт. Посоветуйте, плз, в каком направлении двигаться и в чём может быть причина?

Показываю участок кода на котором происходит проблема:

const mysql = require("mysql2");

const gPool = createPoolDB(10)
function createPoolDB(limit){ 
    const pool = mysql.createPool({
        connectionLimit: `${limit}`,
        host: "localhost",
        user: "user",
        database: "users",
        password: "password"
    }).promise()
    return pool;
}
app.post('/labData', (request, response) => {  // обнова
    let date = getDate() // получает текущие дату и время
    let session = request.sessionID
    let nameTable = users[session].user + '_progress'
    saveErrLog(gPool.pool._closed, date, 'labData-1', 'test')
    try {getLabData()}
    catch(err){saveErrLog(err, date, 'labData', 'test')}
    saveErrLog(gPool.pool._closed, date, 'labData-after', 'test')
    async function getLabData(){
        users[session].exec.selectLabData = {
            userProgress: `SELECT * FROM ${nameTable}`,
            usersStage2: `SELECT * FROM users_stage2 WHERE nickname     = '${users[session].user}'`,
        }
        let obj = users[session].exec.selectLabData
        let data = await gPool.execute(obj.userProgress)
        .catch(err => {saveErrLog(err, date, 'execGetLabData1', 'errorLogDB')})
        saveErrLog(gPool.pool._closed, date, 'labData-SELECT-1', 'test')
        data = data[0]
        obj.userProgress = null
        
        let data2 = await gPool.execute(obj.usersStage2)
        .catch(err => {saveErrLog(err, date, 'execGetLabData2', 'errorLogDB')})
        data2 = data2[0]
        data2.forEach((item)=>{
            if(item.nickname == users[session].user){RP = item.ResPoints}
        })
        obj.usersStage2 = null
   }
})
    function saveErrLog(err, date, name, logFile){
        if(logFile != 'test' && logFile != 'test2'){
            try {fs.appendFileSync(`${logFile}.txt`, `${date}: "${name}", ${err.stack}\n`)}
            catch(error){
            let str = error.name + error.message
            fs.appendFileSync(`errorLogAppendFile.txt`, `${date}: "", ${str}\n`)
            }
        }
        err = JSON.stringify(err)
        try {fs.appendFileSync(`${logFile}.txt`, `${date}: "${name}", ${err}\n`)}
        catch(error){
            let str = error.name + error.message
            fs.appendFileSync(`errorLogAppendFile.txt`, `${date}: "", ${str}\n`)
        }
    }

Записанный лог в файле test:

  • 21.04, 12:59: "leaderboard-SELECT", false
  • 21.04, 12:59: "leaderboard-SELECT-2", false
  • 21.04, 12:59: "auth-SELECT", false
  • 21.04, 12:59: "auth-SELECT-2", false
  • 21.04, 12:59: "labData-1", false
  • 21.04, 12:59: "labData-after", false
  • 21.04, 12:59: "labData-SELECT-1", false

Данные ошибки:

21.04, 12:59: "execGetLabData1", Error: Can't add new command when connection is in closed state at PromisePool.execute (/home/nick/domains/domain.ru/public_html/myapp/node_modules/mysql2/lib/promise/pool.js:54:22) at getLabData (/home/nick/domains/domain.ru/public_html/myapp/app.js:523:32) at /home/nick/domains/domain.ru/public_html/myapp/app.js:510:9 at Layer.handle [as handle_request] (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/layer.js:95:5) at next (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/route.js:137:13) at Route.dispatch (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/layer.js:95:5) at /home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/index.js:281:22 at Function.process_params (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/index.js:335:12) at next (/home/nick/domains/domain.ru/public_html/myapp/node_modules/express/lib/router/index.js:275:10)

21.04, 12:59: "execGetLabData1", {"message":"Can't add new command when connection is in closed state"}


Ответы (1 шт):

Автор решения: vk.com.PMvanilla

Наконец-то удалось справиться с проблемой. Оказалось всё дело в старой версии базы данных. Слишком подробно не разбирался, но на хостинге стоит MySQL 8.0.37-29, а Node.js версии 14. Решение: заменил пакет mysql2 на mysql, вручную сделал к нему промис. Больше ничего не менял, пул соединений сразу заработал как надо.

P.S. Почти год танцев с бубном...

→ Ссылка