Гид по технологиям

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

5 min read Базы данных Обновлено 29 Dec 2025
Подключение Node.js к MySQL — шаг за шагом
Подключение 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 mysql2

mysql2 совместим с промисами и предлагает удобный интерфейс как для одиночных соединений, так и для пулов.

Простое подключение (одиночное соединение)

Пример конфигурации подключения (замените значения на свои):

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 шага)

  1. Подготовьте среду (установите MySQL, создайте базу и пользователя).
  2. Настройте проект и проверьте одиночное подключение.
  3. Перейдите на пул соединений и запустите нагрузочное тестирование.
  4. Внедрите мониторинг и практики безопасности.

Частые ошибки и как их избежать

  • Хранение паролей в репозитории — используйте переменные окружения.
  • Игнорирование обработки ошибок — всегда перехватывайте и логируйте ошибки БД.
  • Неправильная настройка пула — тестируйте в режиме, близком к продакшену.

Критерии приёмки

  • Приложение успешно подключается к базе из рабочей среды.
  • Пул соединений выдерживает целевую нагрузку без превышения лимитов.
  • Секреты не присутствуют в кодовой базе.
  • Выполняются базовые проверки безопасности (минимальные привилегии, бекап).

Глоссарий (по одному предложению)

  • MySQL — реляционная система управления базами данных с открытым исходным кодом.
  • Пул соединений — набор заранее открытых соединений, используемых по требованию.
  • ORM — программный слой, который отображает таблицы БД на объекты языка.

Краткое резюме

Подключение Node.js к MySQL можно реализовать либо через одиночное соединение, либо через пул. Для приложений с параллельными запросами пул будет более экономным и устойчивым. Обязательно применяйте базовые меры безопасности: храните секреты вне кода, ограничивайте привилегии и используйте шифрование соединений.

Дополнительные материалы: рассмотрите ORM/Query Builder при росте сложности доменной модели.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

AutoHotkey: скрипты и как создавать свои
Автоматизация

AutoHotkey: скрипты и как создавать свои

Ошибка Sync is Paused в Microsoft Edge — как исправить
Технологии

Ошибка Sync is Paused в Microsoft Edge — как исправить

Голосовой чат в Telegram: как запустить и управлять
Социальные сети

Голосовой чат в Telegram: как запустить и управлять

Резервное копирование фото на Android — как и где хранить
Mobile

Резервное копирование фото на Android — как и где хранить

Как скрыть полное имя в Slack
Приватность

Как скрыть полное имя в Slack

Bitwarden на Raspberry Pi Zero 2 W — самохостинг
DevOps

Bitwarden на Raspberry Pi Zero 2 W — самохостинг