Подключение Node.js к MySQL: пошаговое руководство

Введение
Большинство реальных приложений сохраняют данные в базах данных. Умение подключать приложение к базе и получать данные — базовый навык для backend-разработчика. MySQL — популярная реляционная СУБД: простая в использовании, с широким сообществом и большим набором инструментов.
Кому полезно: разработчикам на Node.js, инженерам‑DevOps, администраторам баз данных.
Короткое определение: пул соединений — набор заранее открытых соединений с БД, которые переиспользуются для уменьшения задержек и нагрузки на сервер.
Что потребуется перед началом
- Установленный MySQL сервер (локально или доступный по сети).
- Созданная пустая база данных (например, nodedb).
- Учетные данные: имя пользователя и пароль с нужными правами.
- Node.js и npm установлены на машине разработчика.
Важно: для локального теста убедитесь, что MySQL слушает на localhost и порт 3306, если конфигурация другая — используйте соответствующие значения.
Создаём Node.js проект
Откройте терминал и создайте папку проекта:
mkdir node-mysqlПерейдите в папку и инициализируйте npm:
cd node-mysql
npm init -yЭто создаст package.json, где будут храниться зависимости и метаданные проекта.
Установка mysql2
Для подключения рекомендуем пакет mysql2 — современная и поддерживаемая библиотека:
npm install mysql2mysql2 совместим с промисами и предлагает удобный интерфейс как для одиночных соединений, так и для пулов.
Простое подключение (одиночное соединение)
Пример конфигурации подключения (замените значения на свои):
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(), библиотека возвращает объект соединения, через который можно выполнять SQL‑запросы.
Пример создания таблицы:
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 в вашей базе данных. Синтаксис SQL можно адаптировать под вашу схему.
Когда одиночного подключения недостаточно
Одиночное соединение подходит для простых скриптов или небольших утилит. В многопоточных или высоконагруженных приложениях открытие и закрытие соединений для каждого запроса становится дорогим по времени и ресурсам. В таких случаях следует использовать пул.
Подключение через пул соединений
Пул поддерживает заранее открытые соединения и выдаёт их по требованию. Это снижает накладные расходы при одновременных запросах.
Пример создания пула и выполнения запроса:
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);
});Советы по параметрам пула:
- connectionLimit — максимальное число одновременных соединений. Настройте под возможности сервера.
- Используйте промисы или async/await (mysql2 поддерживает promise API через .promise()).
Альтернативы и расширения
- Knex.js или TypeORM — если нужно ORM/Query Builder над MySQL.
- Sequelize — ORM с высоким уровнем абстракции (подходит для сложных моделей).
- Использование TLS/SSL для шифрования трафика между приложением и сервером базы.
Каждое решение имеет компромиссы: ORM упрощает работу с моделями, но добавляет сложность и влияет на производительность.
Когда подключение может не работать
- Неверные учётные данные (user/password).
- MySQL не слушает на указанном интерфейсе (localhost vs 0.0.0.0).
- Брандмауэр блокирует порт 3306.
- Ограничения по максимальному числу соединений на сервере.
Проверяющие команды: mysql -u user -p -h host — чтобы исключить проблему на уровне сети/учётной записи.
Безопасность и жёсткая конфигурация
- Используйте сильные пароли и ротацию секретов.
- Не храните пароли в коде; используйте переменные окружения или секретные хранилища (Vault, AWS Secrets Manager).
- Ограничьте привилегии пользователя: выдавайте только те права, которые нужны приложению.
- Запретите удалённые входы для административных аккаунтов.
- Включите шифрование соединений (TLS) для передачи данных по сети.
- Ведите мониторинг и логирование попыток неудачных подключений.
Роль‑ориентированные контрольные списки
Разработчик:
- Настроить .env и не коммитить секреты.
- Использовать пул для запросов в API.
- Обрабатывать ошибки и таймауты.
DBA:
- Настроить резервные копии базы данных.
- Ограничить максимальное число соединений и установить квоты.
- Проводить аудит привилегий пользователей.
DevOps:
- Настроить секретное хранилище и CI/CD, чтобы не заливать пароли.
- Мониторить метрики подключений и латентности.
Контрольный список для запуска проекта
- MySQL запущен и доступен
- Создана база и пользователь с нужными правами
- Установлен пакет mysql2 в проекте
- Конфигурация пула проверена и настроена
- Секреты вынесены в переменные окружения
Ментальные модели и эвристики
- «Пул для производительности»: если ожидается более 5–10 одновременных запросов, используйте пул.
- «Минимизируй права»: пользуйтесь минимумом привилегий для приложения.
- «Проверяй сеть первым»: большинство проблем с подключением — сетевые.
Простая методология внедрения (4 шага)
- Подготовьте среду (установите MySQL, создайте базу и пользователя).
- Настройте проект и проверьте одиночное подключение.
- Перейдите на пул соединений и запустите нагрузочное тестирование.
- Внедрите мониторинг и практики безопасности.
Частые ошибки и как их избежать
- Хранение паролей в репозитории — используйте переменные окружения.
- Игнорирование обработки ошибок — всегда перехватывайте и логируйте ошибки БД.
- Неправильная настройка пула — тестируйте в режиме, близком к продакшену.
Критерии приёмки
- Приложение успешно подключается к базе из рабочей среды.
- Пул соединений выдерживает целевую нагрузку без превышения лимитов.
- Секреты не присутствуют в кодовой базе.
- Выполняются базовые проверки безопасности (минимальные привилегии, бекап).
Глоссарий (по одному предложению)
- MySQL — реляционная система управления базами данных с открытым исходным кодом.
- Пул соединений — набор заранее открытых соединений, используемых по требованию.
- ORM — программный слой, который отображает таблицы БД на объекты языка.
Краткое резюме
Подключение Node.js к MySQL можно реализовать либо через одиночное соединение, либо через пул. Для приложений с параллельными запросами пул будет более экономным и устойчивым. Обязательно применяйте базовые меры безопасности: храните секреты вне кода, ограничивайте привилегии и используйте шифрование соединений.
Дополнительные материалы: рассмотрите ORM/Query Builder при росте сложности доменной модели.
Похожие материалы
AutoHotkey: скрипты и как создавать свои
Ошибка Sync is Paused в Microsoft Edge — как исправить
Голосовой чат в Telegram: как запустить и управлять
Резервное копирование фото на Android — как и где хранить
Как скрыть полное имя в Slack