Получение «connect ETIMEDOUT» в моем nodejs, проект mysql2 регистрируется случайным образом, что приводит к отключениюMySql

Форум по Mysql
Ответить
Anonymous
 Получение «connect ETIMEDOUT» в моем nodejs, проект mysql2 регистрируется случайным образом, что приводит к отключению

Сообщение Anonymous »

Иногда эта ошибка возникает случайно в моем проекте nodejs,mysql, который размещен в службе приложений Azure. Из-за этого моя служба приложений отключается много раз в день, тогда как мой промежуточный сервер приложений все еще работает и подключен к той же базе данных, я использую пакет mysql2 для подключения к базе данных mysql. Я использую пул соединений для подключения к базе данных MySQL. Иногда я получаю эту ошибку случайно. Я не могу выяснить причину этой ошибки. Может ли кто-нибудь мне помочь с этим?
/home/site/wwwroot/node_modules/mysql2/lib/connection.js:205
const err = new Error('connect ETIMEDOUT');
^

Error: connect ETIMEDOUT
at PoolConnection._handleTimeoutError (/home/site/wwwroot/node_modules/mysql2/lib/connection.js:205:17)
at listOnTimeout (node:internal/timers:573:17)
at process.processTimers (node:internal/timers:514:7) {
errorno: 'ETIMEDOUT',
code: 'ETIMEDOUT',
syscall: 'connect',
fatal: true
}

Ниже приведен код подключения к базе данных для mysql2.
const mysql = require("mysql2");
require("dotenv").config();

const CONNECTION_LIMIT = process.env.CONNECTION_LIMIT;
const IDLE_TIMEOUT = process.env.IDLE_TIMEOUT;
const MAX_IDLE = process.env.MAX_IDLE;

function createCentralPool(credentials, options) {
try {
let { removeDatabase } = options || {};
let dbinfo = {
host: process.env.DEFAULT_DB_HOST,
user: process.env.DEFAULT_DB_USER,
password: process.env.DEFAULT_DB_PASSWORD,
database: process.env.DEFAULT_DB_DATABASE,
port: process.env.DEFAULT_DB_PORT,
connectionLimit: CONNECTION_LIMIT,
idleTimeout: IDLE_TIMEOUT,
maxIdle: MAX_IDLE,
charset: "utf8mb4",
dateStrings: true,
...credentials,
};
if (removeDatabase) delete dbinfo.database;
const pool = mysql.createPool({
...dbinfo,
enableKeepAlive: true,
});

const promisePool = pool.promise();
return promisePool;
} catch (error) {
console.log(error, "createCentralPool");
}
}

function createPoolForUserDatabase(credentials) {
try {
let dbInfo = {
host: process.env.DEFAULT_DB_HOST,
user: process.env.DEFAULT_DB_USER,
password: process.env.DEFAULT_DB_PASSWORD,
// database: process.env.DEFAULT_DB_DATABASE,
port: process.env.DEFAULT_DB_PORT,
connectionLimit: CONNECTION_LIMIT,
idleTimeout: IDLE_TIMEOUT,
maxIdle: MAX_IDLE,
charset: "utf8mb4",
dateStrings: true,
...credentials,
};
const pool = mysql.createPool({ ...dbInfo });

// Log connection events
// logPoolEvents(pool);

const promisePool = pool.promise();

return promisePool;
} catch (error) {
console.log(error, "createPoolForUserDatabase");
}
}

const centralDbPool = createCentralPool();
const userDbPools = new Map();

function getUserDbPool(_credentials) {
let credentials = { ..._credentials };
delete credentials?.details;
try {
const { database } = credentials || {};

let userDbPool = userDbPools.get(database);

if (!userDbPool) {
userDbPool = createPoolForUserDatabase(credentials);
userDbPools.set(database, userDbPool);
}

return userDbPool;
} catch (error) {
console.log(error);
throw new Error(error);
}
}

module.exports = {
centralDbPool,
createCentralPool,
getUserDbPool,
};


Подробнее здесь: https://stackoverflow.com/questions/793 ... -causing-t
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»