Вопрос или проблема
Привет, я создал приложение на 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();
Возможные причины проблемы и решения
-
Проблемы с настройкой MySQL:
- Убедитесь, что ваш MySQL-сервер настроен на прием соединений от вашего бэкенда. Проверьте настройки файлов конфигурации MySQL, таких как
my.cnf
(обычно находится в/etc/mysql/
). - Необходимые параметры:
[mysqld] bind-address = 127.0.0.1
- Убедитесь, что указанные вами имя пользователя и пароль правильные и у пользователя
Test
есть разрешения на доступ к базе данныхTest
.
- Убедитесь, что ваш MySQL-сервер настроен на прием соединений от вашего бэкенда. Проверьте настройки файлов конфигурации MySQL, таких как
-
Управление соединением:
-
Ваш текущий код создает соединение только один раз. Если это соединение закрывается, ваш код не создает новое. Рекомендуется использовать
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;
-
-
Проблемы с сетью и тайм-аутами:
- Если соединение становится неактивным на длительное время, MySQL может закрыть его. Проверьте параметры
wait_timeout
иinteractive_timeout
в конфигурации MySQL. Эти параметры могут быть увеличены для предотвращения разрывов соединений.SET GLOBAL wait_timeout = 28800; SET GLOBAL interactive_timeout = 28800;
- Если соединение становится неактивным на длительное время, MySQL может закрыть его. Проверьте параметры
-
Логи и отладка:
- Изучите логи MySQL, чтобы найти более подробную информацию о том, почему соединение закрывается. Логи могут находиться в
/var/log/mysql/error.log
. - Включите дополнительное логирование в вашем приложении, чтобы отслеживать, когда и почему происходит сбой соединения.
- Изучите логи MySQL, чтобы найти более подробную информацию о том, почему соединение закрывается. Логи могут находиться в
-
Перезапуск служб:
- После внесения изменений в конфигурационные файлы, не забудьте перезапустить MySQL и ваше приложение через pm2:
sudo systemctl restart mysql pm2 restart your-app-name
- После внесения изменений в конфигурационные файлы, не забудьте перезапустить MySQL и ваше приложение через pm2:
Заключение
Проблема с закрытием соединения MySQL на Ubuntu может быть вызвана несколькими факторами, включая неверные настройки соединений, управлением тайм-аутами и конфигурациями. Использование пула соединений и корректировка переменных конфигурации может помочь решить вашу проблему. Следуя предложенным рекомендациям, вы сможете добиться стабильного подключению к вашей базе данных и надежно развернуть приложение.
Если у вас остались вопросы или необходимо дополнительная помощь, не стесняйтесь обращаться за поддержкой.