Как подключить Node.js к MySQL
Кратко
Это пошаговое руководство показывает, как подключить Node.js к MySQL: установка сервера, создание простого приложения, настройка пула соединений и базовые меры безопасности. Подойдёт для локальной разработки и как основа для продакшн-конфигураций.

Прежде чем начать
Поскольку примеры используют локальный MySQL-сервер, установите MySQL на вашей машине. Затем создайте пустую базу данных и убедитесь, что у вас есть имя пользователя и пароль.
Важно: используйте отдельный пользователя для разработки и другой — для продакшна. Не храните пароли в исходном коде.
Создание Node-приложения
В терминале выполните команду, чтобы создать новую папку для приложения:
mkdir node-mysql
Перейдите в папку node-mysql и инициализируйте проект через npm:
cd node-mysql
npm init -y
В результате появится package.json, где будут храниться зависимости проекта.
Подключение Node к MySQL
Для работы с MySQL из Node часто используют пакет mysql2. Установите его так:
npm install mysql2
Чтобы подключиться, нужны параметры: host, port, user, database и password. Пример конфигурации для базы nodedb на локальном сервере:
const config = {
host: "localhost",
port: 3306,
database: "nodedb",
user: "root",
password: "********",
}
Ниже полный пример создания одиночного соединения. Этот подход годится для простых скриптов или однопоточных задач.
const mysql = require("mysql2")
const config = {
host: "localhost",
database: "db_name",
user: "mysql_username",
password: "mysql_password",
connectionLimit: 100,
}
const connection = mysql.createConnection(config)
connection.connect(function(err) {
if (err) throw(err);
console.log("Connected!");
});
Когда вы передаёте параметры в mysql.createConnection(), вы получаете объект соединения. Он позволяет выполнять операции: создание, удаление и чтение таблиц.
Пример создания таблицы:
connection.connect(function(err) {
if (err) throw err;
console.log("Connected!");
let createUser = `CREATE TABLE users (user_id INT(100), user_name VARCHAR(255), email VARCHAR(255))`;
connection.query(createUser, function(err, results, fields) {
if (err) {
console.log(err.message);
}
});
});
Этот запрос создаст таблицу users в подключённой базе. Синтаксис можно адаптировать для вашей схемы.
Примечание: одиночное соединение подходит, если у приложения небольшой объём запросов и отсутствует высокая конкуренция пользователей.
Использование пула соединений
Открытие и закрытие соединений ресурсоёмко. Пул соединений поддерживает набор открытых соединений и переиспользует их при запросах. Это уменьшает задержки и нагрузку на сервер базы.
Пример создания пула:
const mysql = require("mysql2");
const config = {
host: "localhost",
database: "db_name",
user: "mysql_username",
password: "mysql_password",
connectionLimit: 100,
}
const pool = mysql.createPool(config);
pool.query("SELECT * FROM some_table", (err, data) => {
if (err) throw(err)
console.log(data);
});
Не забудьте заменить параметры конфигурации на значения вашей среды.
Безопасное подключение к MySQL
mysql2 упрощает подключение Node-приложения к MySQL. Но соединение — это только начало. Хранение и доступ к данным должны быть защищены.
Рекомендации по безопасности:
- Используйте сильные пароли и уникальные учётные записи.
- Ограничьте удалённые подключения по IP, если это возможно.
- Не давайте лишних привилегий — принцип минимальных прав.
- Храните секреты в переменных окружения или в vault, а не в репозитории.
- Используйте SSL/TLS для подключения к удалённым серверам.
- Логируйте и мониторьте неудачные попытки подключения.
Важно: для продакшн-среды настройте отдельный пользовательский аккаунт с правами только на те таблицы и операции, которые требуются приложению.
Когда это не работает
- Неправильные параметры подключения: проверьте host, порт, user, password и имя базы.
- Сервер MySQL не запущен или блокируется firewall.
- Переполнение лимита одновременных соединений (max_connections) на стороне сервера.
- Ошибки прав доступа (причина — GRANT/REVOKE).
Как диагностировать: проверьте логи MySQL, используйте mysql CLI для попытки подключения и включите подробный лог в приложении.
Альтернативные подходы
- Использовать пакет mysql (старый, меньше возможностей) или ORM уровня выше: Sequelize, TypeORM, Prisma.
- Если нужна лёгкая работа с потоками/пулом в асинхронном стиле, выбирайте mysql2 с Promise API: require(‘mysql2/promise’).
- Для больших систем — использовать промежуточный слой (API/микросервис) между приложением и базой.
Инструменты и приёмы (ментальные модели)
- «Пул как пула прокладок»: представьте пул как набор готовых соединений. Возьми — поработай — верни в пул.
- «Минимальные права»: давайте приложениям только те права, которые точно нужны.
- «Тонкая схема»: нормализуйте данные, но не переусердствуйте в первых версиях.
Руководство по безопасности сервера MySQL
Короткий чек-лист для администраторов:
- Отключить удалённые подключения для root.
- Создать отдельного пользователя приложения с минимальными привилегиями.
- Настроить бэкапы и их тестовое восстановление.
- Включить шифрование соединений (TLS) при необходимости.
- Ограничить доступ по IP и настроить firewall.
Чек-листы по ролям
Разработчик:
- Проверить подключение локально с теми же переменными окружения.
- Не коммитить секреты в VCS.
- Использовать пул при высокой конкуренции.
Администратор БД:
- Проверить max_connections и производительность.
- Настроить пользователям минимальные привилегии.
- Мониторить метрики (latency, slow queries).
Операции/DevOps:
- Настроить секретное хранилище (vault, AWS Secrets Manager и т. п.).
- Обеспечить резервное копирование и план восстановления.
Краткая методология внедрения
- Настройте и протестируйте локальный MySQL.
- Создайте учётную запись приложения с ограниченными правами.
- Реализуйте подключение и простые запросы локально.
- Замените строки подключения на переменные окружения.
- Переключитесь на пул соединений при нагрузке.
- Настройте мониторинг и бэкапы.
Критерии приёмки
- Приложение успешно подключается к базе и выполняет CRUD-операции.
- Нет утечек соединений — количество открытых соединений стабильно.
- Пароли хранятся в безопасном хранилище, а не в репозитории.
- Нагрузочные тесты показывают приемлемую латентность.
Тесты и проверка
- Подключение: попытка подключиться через mysql2 и через mysql CLI.
- Функциональность: операции CREATE/READ/UPDATE/DELETE на тестовой таблице.
- Нагрузочное тестирование: симулировать N параллельных соединений и проверить отклик.
- Безопасность: попытаться подключиться с неправильными учетными данными и проверить логи.
Шаблон конфигурации (пример .env)
DATABASE_HOST=localhost DATABASE_PORT=3306 DATABASE_USER=mysql_username DATABASE_PASS=mysql_password DATABASE_NAME=db_name CONNECTION_LIMIT=100
(Используйте реальное хранилище секретов в продакшне.)
Глоссарий — 1 строка на термин
- Пул соединений: набор открытых соединений, переиспользуемых приложением.
- Oдиночное соединение: один TCP-сеанс к базе данных.
- ORM: объектно-реляционный маппер, библиотека для работы с БД на уровне объектов.
Итог
Подключение Node.js к MySQL несложно. Для небольших задач достаточно одиночного соединения. Для приложений с параллельными запросами используйте пул соединений. Обязательно применяйте базовые меры безопасности: минимальные привилегии, хранение секретов вне репозитория и шифрование при необходимости.
Важно: перед переводом решения в продакшн выполните тестирование под нагрузкой и настройте мониторинг.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone