// Engineering Log
Базы данных: Часть 2 — MySQL
Опубликовано 21.09.2026
// Быстрый маршрут
Эта статья относится к теме Серверы и инфраструктура.
MySQL — реляционная СУБД, которая с конца 1990-х годов остаётся одной из самых распространённых в веб-разработке. На ней работают WordPress, Joomla, Drupal, многие интернет-магазины и форумы, её поддерживает практически любой хостинг. С 2010 года MySQL принадлежит Oracle: бесплатная версия Community Server распространяется под лицензией GPLv2, коммерческая Enterprise Edition — по подписке.
Версии и поддержка
С 2023 года Oracle выпускает MySQL двумя потоками:
- LTS (Long-Term Support) — стабильные ветки, которые получают исправления и обновления безопасности в течение многих лет без изменения функциональности. Сейчас это 8.4 LTS (поддержка до апреля 2032 года с учётом расширенной) и 9.7 LTS, вышедшая весной 2026 года;
- Innovation — ежеквартальные выпуски с новыми функциями, каждый поддерживается только до выхода следующего.
Для рабочих систем следует выбирать LTS. Ветка 8.0 больше не поддерживается: расширенная поддержка закончилась в апреле 2026 года, и серверы на ней нужно переводить на 8.4 или 9.7.
В сентябре 2025 года Oracle сократила около 70 разработчиков команды MySQL; по сообщениям отраслевых изданий, команду перевели в подразделение облачного сервиса HeatWave. Часть сообщества восприняла это как признак того, что бесплатная версия будет развиваться медленнее. Это весомый довод присмотреться к совместимым альтернативам.
Альтернативы: MariaDB и Percona Server
- MariaDB — форк MySQL, созданный в 2009 году одним из авторов MySQL Михаэлем Видениусом. Долгое время был прямой заменой MySQL, но с годами ветки разошлись: миграция между современными версиями возможна, однако уже требует проверки. Актуальные LTS-ветки MariaDB — 10.11, 11.4, 11.8 и 12.3. Во многих дистрибутивах Linux пакет «mysql» по умолчанию ставит именно MariaDB.
- Percona Server for MySQL — сборка MySQL от компании Percona, полностью совместимая с оригиналом, с дополнительными инструментами диагностики и функциями, которые у Oracle есть только в Enterprise-версии.
Где MySQL уместен
- Сайты на CMS и фреймворках. WordPress официально поддерживает MySQL и MariaDB; для него это естественный выбор.
- Интернет-магазины и веб-сервисы с преобладанием чтения: MySQL хорошо справляется с большим числом простых запросов.
- Небольшие корпоративные системы — CRM, учёт заявок, внутренние сервисы, если приложение рассчитано на MySQL.
Если проект начинается с нуля и жёстких требований к СУБД нет, стоит сравнить MySQL с PostgreSQL: у PostgreSQL богаче набор типов данных и расширений, и он не зависит от одной компании.
Как устроен MySQL
Движки хранения
MySQL хранит таблицы с помощью подключаемых движков. По умолчанию используется InnoDB: он поддерживает транзакции, внешние ключи, блокировки на уровне строк и восстановление после сбоев. Старый движок MyISAM транзакций не поддерживает, блокирует таблицу целиком при записи и после аварии может потребовать ремонта таблиц. Для новых таблиц его использовать не стоит, а старые разумно перевести на InnoDB:
ALTER TABLE имя_таблицы ENGINE=InnoDB;Репликация
Репликация копирует изменения с основного сервера на один или несколько резервных. Начиная с версии 8.0.22 MySQL использует термины source (источник) и replica (реплика) вместо устаревших master и slave; команды тоже переименованы: START REPLICA, SHOW REPLICA STATUS, CHANGE REPLICATION SOURCE TO.
Реплики используют для:
- распределения нагрузки на чтение;
- резервного сервера на случай отказа основного;
- снятия резервных копий без нагрузки на основной сервер.
Для автоматического переключения при отказе и записи на несколько узлов существует Group Replication и построенный на ней InnoDB Cluster.
Базовая настройка
Отдельный пользователь для каждого приложения
Приложение не должно подключаться к базе под root. Для каждого приложения создают отдельную базу и пользователя с правами только на неё:
CREATE DATABASE shop CHARACTER SET utf8mb4;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'надёжный_пароль';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop'@'localhost';Если приложение само создаёт и изменяет таблицы при обновлениях, к правам добавляют CREATE, ALTER, INDEX и DROP. Часть @'localhost' означает, что подключаться можно только с того же сервера. Открывать доступ с любого адреса ('%') без необходимости не следует.
Кодировку лучше задавать utf8mb4: старая utf8 в MySQL хранит не все символы Юникода, например не сохраняет эмодзи.
Резервное копирование
mysqldump создаёт логическую копию — набор SQL-команд, из которых база восстанавливается. Для таблиц InnoDB ключ --single-transaction делает согласованный снимок без блокировки работы приложения:
mysqldump --single-transaction --routines --triggers --events shop > shop.sqlВосстановление:
mysql shop < shop.sqlЛогическая копия удобна для небольших баз и переноса между версиями, но на базах в десятки гигабайт её создание и особенно восстановление занимает часы. Для больших баз применяют физическое копирование:
- Percona XtraBackup копирует файлы данных без остановки сервера. Версия XtraBackup должна соответствовать ветке сервера: XtraBackup 8.4 работает только с MySQL 8.4;
- MySQL Shell с утилитами
util.dumpInstance()иutil.loadDump()создаёт и восстанавливает копии в несколько потоков.
Резервная копия, которую ни разу не восстанавливали, не даёт уверенности в сохранности данных: восстановление нужно регулярно проверять на отдельном сервере.
Инструменты администрирования
- mysql — консольный клиент, входит в поставку сервера.
- MySQL Shell — современный клиент с режимами SQL, JavaScript и Python, утилитами резервного копирования и проверки готовности к обновлению (
util.checkForServerUpgrade()). - phpMyAdmin и Adminer — веб-интерфейсы, привычные пользователям хостинга. Публиковать их в интернет без дополнительной защиты (ограничения по IP-адресу, отдельной авторизации) не следует: их постоянно сканируют боты.
- MySQL Workbench и DBeaver — настольные программы для работы со схемой и запросами.
Типичные ошибки
- Устаревший способ аутентификации. Плагин
mysql_native_passwordотключён по умолчанию в MySQL 8.4 и удалён в 9.0; по умолчанию используетсяcaching_sha2_password. Старые клиенты и драйверы после обновления сервера могут перестать подключаться — их нужно обновить заранее. - Настройки по умолчанию на рабочем сервере. Главный параметр производительности InnoDB —
innodb_buffer_pool_size, объём памяти под кеш данных. На выделенном сервере БД его обычно ставят в 50–75 % оперативной памяти. - Порт 3306, открытый в интернет. Сервер базы данных должен быть доступен только приложению: слушать
127.0.0.1или внутреннюю сеть, либо быть закрыт межсетевым экраном. - Отсутствие индексов. Медленные запросы находят через журнал медленных запросов (
slow_query_log) и разбирают командойEXPLAIN. - Обновление без проверки. Переход между ветками (8.0 → 8.4 → 9.7) делают через проверку совместимости на копии базы: изменились параметры по умолчанию, часть устаревших функций удалена.
Итог
MySQL — зрелая СУБД с огромной экосистемой и естественный выбор для сайтов на популярных CMS. Для рабочих систем стоит использовать ветку LTS, настроить резервное копирование с проверкой восстановления и следить за тем, как Oracle развивает бесплатную версию. Если зависимость от одной компании критична, совместимые MariaDB и Percona Server позволяют сменить поставщика без переписывания приложения.
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Серверы и инфраструктура
VPS, Linux, веб-стек, миграции, хостинг, базы данных и базовая эксплуатация.
Часто с этим приходят
- Перенести сайт или сервис на новый сервер
- Настроить Linux, Nginx, базу данных и бэкапы
- Разобраться, почему всё работает нестабильно
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related