Mysql закрывает соединение на Ubuntu

Вопрос или проблема

Привет, я создал приложение на MERN (вместо MongoDB использовал MySQL) и развернул его на VPS (Ubuntu 24.04). Всё кажется в порядке, но когда я пытаюсь проверить логи своего бэкенда с помощью пакета pm2, это выдает мне что-то странное: сначала показывает ошибки, а затем, кажется, подключается.
Я добавляю свой код соединения с базой данных (не знаю, почему, когда я вставил код, он неформатирован)

const mysql = require('mysql2');
const dbHost = "127.0.0.1";
const databaseConnection = () => {
  const db = mysql.createConnection({
    host: '127.0.0.1',
    user: 'Test',
    password: 'Iwillnottell', 
    database: 'Test',
  });
  db.connect(err => {
    if (err) throw err;
    console.log('MySQL подключен...');
  });
  return db; };
module.exports = databaseConnection();

введите описание изображения здесь

Ответ или решение

Проблема с закрытием соединения MySQL на Ubuntu

Суть проблемы

Вы разработали приложение на MERN стеке, но вместо MongoDB вы используете MySQL и развернули ваше приложение на VPS с операционной системой Ubuntu 24.04. При проверке логов вашего бэкенда, используя пакет pm2, вы сталкиваетесь с ошибками связки и непредсказуемым поведением подключения к базе данных.

Анализ кода подключения к MySQL

Ваш код подключения выглядит следующим образом:

const mysql = require('mysql2');
const dbHost = "127.0.0.1";
const databaseConnection = () => {
  const db = mysql.createConnection({
    host: '127.0.0.1',
    user: 'Test',
    password: 'Iwillnottell', 
    database: 'Test',
  });
  db.connect(err => {
    if (err) throw err;
    console.log('MySQL Connected...');
  });
  return db;
};
module.exports = databaseConnection();

Возможные причины проблемы и решения

  1. Проблемы с настройкой MySQL:

    • Убедитесь, что ваш MySQL-сервер настроен на прием соединений от вашего бэкенда. Проверьте настройки файлов конфигурации MySQL, таких как my.cnf (обычно находится в /etc/mysql/).
    • Необходимые параметры:
      [mysqld]
      bind-address = 127.0.0.1
    • Убедитесь, что указанные вами имя пользователя и пароль правильные и у пользователя Test есть разрешения на доступ к базе данных Test.
  2. Управление соединением:

    • Ваш текущий код создает соединение только один раз. Если это соединение закрывается, ваш код не создает новое. Рекомендуется использовать mysql.createPool() для создания пула соединений, что обеспечит более надежное управление соединениями:

      const mysql = require('mysql2');
      const pool = mysql.createPool({
      host: '127.0.0.1',
      user: 'Test',
      password: 'Iwillnottell',
      database: 'Test',
      connectionLimit: 10
      });
      
      pool.getConnection((err, connection) => {
      if (err) {
       console.error('Error connecting to MySQL:', err);
       return;
      }
      console.log('MySQL Connected...');
      connection.release();
      });
      
      module.exports = pool;
  3. Проблемы с сетью и тайм-аутами:

    • Если соединение становится неактивным на длительное время, MySQL может закрыть его. Проверьте параметры wait_timeout и interactive_timeout в конфигурации MySQL. Эти параметры могут быть увеличены для предотвращения разрывов соединений.
      SET GLOBAL wait_timeout = 28800;
      SET GLOBAL interactive_timeout = 28800;
  4. Логи и отладка:

    • Изучите логи MySQL, чтобы найти более подробную информацию о том, почему соединение закрывается. Логи могут находиться в /var/log/mysql/error.log.
    • Включите дополнительное логирование в вашем приложении, чтобы отслеживать, когда и почему происходит сбой соединения.
  5. Перезапуск служб:

    • После внесения изменений в конфигурационные файлы, не забудьте перезапустить MySQL и ваше приложение через pm2:
      sudo systemctl restart mysql
      pm2 restart your-app-name

Заключение

Проблема с закрытием соединения MySQL на Ubuntu может быть вызвана несколькими факторами, включая неверные настройки соединений, управлением тайм-аутами и конфигурациями. Использование пула соединений и корректировка переменных конфигурации может помочь решить вашу проблему. Следуя предложенным рекомендациям, вы сможете добиться стабильного подключению к вашей базе данных и надежно развернуть приложение.

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

Оцените материал
Добавить комментарий

Капча загружается...