База данных MySQL: полный обзор, плюсы, минусы и пределы

Для чего нужна база данных MySQL, где она лучший выбор, а где выигрывает другая: плюсы и минусы, версии 8.4 и 9, сравнение с PostgreSQL, MariaDB и SQLite, инструменты, примеры SQL, пределы и советы.

Стек и технологии Обновлено

Коротко

MySQL — бесплатная реляционная база данных, которой владеет Oracle, и самая распространённая база веба: на ней работают WordPress, 1С-Битрикс, большинство CMS и платформ магазинов, а ещё GitHub, Shopify и Booking.com. Сильные стороны — простота эксплуатации, дешёвые подключения, очень зрелая репликация и наличие на любом хостинге, включая самый дешёвый. MySQL 8 догнала современный SQL: оконные функции, CTE, JSON, ограничения CHECK, мгновенные изменения схемы. Слабые места по сравнению с PostgreSQL — меньше типов данных и расширений, нет RETURNING, а изменение схемы само фиксирует транзакцию. Поддержка версии 8.0 закончилась в апреле 2026 года — долгосрочная версия теперь 8.4.

MySQL коротко: паспорт базы

Главные факты одной таблицей: откуда база взялась, как она хранит данные и как развивается.

Тип
Реляционная система управления базами данных с открытым кодом
История
MySQL AB, Швеция, 1995 год; Sun — с 2008-го; Oracle — с 2010-го
Лицензия
Редакция Community — по GPL v2; Oracle также продаёт Enterprise и коммерческую лицензию
Движок хранения
InnoDB по умолчанию с 2010 года: транзакции, блокировки строк, кластерный первичный ключ
Транзакции
ACID и MVCC через журнал отката — вакуум не нужен
SQL
С 8.0: оконные функции, CTE, функции JSON, CHECK, EXPLAIN ANALYZE
Индексы
B-tree, полнотекстовые, пространственные; по выражению, убывающие, невидимые
Репликация
Асинхронная и полусинхронная; Group Replication и InnoDB Cluster
Версии
8.4 — долгосрочная версия; 9.x — инновационные выпуски; поддержка 8.0 закончилась в апреле 2026-го
Ответвления
MariaDB (от автора MySQL) и Percona Server
На ней работают
WordPress, 1С-Битрикс, GitHub, Shopify, Booking.com

Для чего применяется MySQL: 8 сфер

MySQL выросла вместе с вебом и сильнее всего именно там. Под каждой сферой — инструменты, с которыми она обычно идёт.

  1. 01

    Сайты на CMS

    Самые популярные CMS сделаны под MySQL и её ответвления.

    WordPressJoomlaDrupal

  2. 02

    Интернет-магазины

    Заказы, остатки и покупатели на готовых платформах и своём коде.

    MagentoPrestaShopWooCommerce

  3. 03

    Веб-приложения

    Классический бэкенд на PHP, Ruby, Python и Go.

    LaravelRailsDjango

  4. 04

    Много простых чтений

    Выборки по ключу в большом объёме — с репликами на чтение.

    ProxySQLреплики

  5. 05

    Огромный горизонтальный масштаб

    Шардинг через Vitess — систему, выросшую в YouTube.

    VitessPlanetScale

  6. 06

    Отказоустойчивость

    Автоматическое переключение на реплику, когда главный сервер падает.

    InnoDB ClusterMySQL Router

  7. 07

    Виртуальный хостинг

    База на любом тарифе хостинга без отдельного администрирования.

    phpMyAdminAdminer

  8. 08

    Управляемые базы в облаке

    Каждое крупное облако даёт MySQL с резервными копиями и репликами из коробки.

    Amazon RDSAuroraCloud SQL

Плюсы и минусы MySQL

MySQL делает ставку на простоту и скорость повседневных операций. Отсюда большинство её сильных сторон и ограничений.

Плюсы · 8

  • Простая в эксплуатации

    Разумные настройки по умолчанию, без вакуума, предсказуемая жизнь на скромном железе.

  • Дешёвые подключения

    Поток на подключение: сотни веб-процессов без пулера.

  • Зрелая репликация

    Реплики на чтение настраиваются быстро; Group Replication и InnoDB Cluster дают переключение при сбое.

  • Есть везде

    На любом хостинге и в любом облаке — вопрос «а поддерживается ли?» не стоит.

  • Экосистема веба

    Большинство CMS и платформ магазинов, инструментов администрирования и панелей хостинга построены вокруг неё.

  • Современный SQL в 8.x

    Оконные функции, CTE, JSON и ограничения CHECK закрыли старые пробелы.

  • Изменения схемы на ходу

    ALGORITHM=INSTANT добавляет колонку без перезаписи таблицы, остальное делает gh-ost.

  • Масштаб, проверенный гигантами

    На ней работают GitHub, Shopify и Booking.com, а Vitess шардирует её горизонтально.

Минусы · 8

  • Владелец — Oracle

    Развитие определяет одна компания; часть возможностей есть только в платных редакциях и облаке.

  • Нет изменения схемы в транзакции

    Каждая команда атомарна, но ALTER TABLE фиксирует транзакцию — неудачная миграция не откатывается.

  • Нет RETURNING

    Вставленную строку приходится читать вторым запросом.

  • Меньше типов и расширений

    Нет массивов, диапазонов и своих типов; ничего похожего на PostGIS или pgvector в открытой редакции.

  • Нет частичных индексов

    Индекс всегда покрывает всю таблицу, даже если запросам нужна её малая часть.

  • Мягкие старые настройки

    Старые установки могут молча обрезать строки и принимать неверные даты.

  • Ответвления расходятся

    MariaDB уже не замена один к одному: JSON и репликация работают иначе.

  • Строчное хранение для аналитики

    Проход по миллиардам строк для отчётов — задача колоночных баз.

MySQL и другие базы: сравнение с PostgreSQL, MariaDB и SQLite

Качественное сравнение с базами, с которыми MySQL выбирают чаще всего.

КритерийMySQLPostgreSQLMariaDBSQLite
Владелец Oracle сообщество MariaDB Foundation и компания общественное достояние
Сервер да да да нет, файл
Простота эксплуатации высокая средняя высокая самая высокая
SQL и типы современная база самые богатые близко к MySQL, свои добавки базовые
Изменение схемы в транзакции нет да нет да
Репликация очень зрелая зрелая зрелая, Galera встроенной нет
Хостинг везде VPS и облака часто вместо MySQL где угодно, это файл
Лучше всего для CMS, магазинов, веб-приложений сервисов, SaaS, сложных данных CMS на хостинге небольших сайтов и приложений

Когда брать MySQL, а когда нет

Двенадцать типичных задач с вердиктом. Где MySQL не лучший выбор, названа альтернатива.

  • Сайт на WordPress или другой CMS

    Лучший выбор

    CMS сделана под неё.

  • Магазин на готовой платформе

    Лучший выбор

    Большинство платформ ждут MySQL.

  • Веб-приложение с простыми данными

    Лучший выбор

    Надёжно, быстро и просто в эксплуатации.

  • Виртуальный хостинг

    Лучший выбор

    Она есть на любом тарифе.

  • Много чтений с репликами

    Лучший выбор

    Репликация — сильная сторона MySQL.

  • Команда с опытом MySQL

    Лучший выбор

    Опыт важнее небольших различий.

  • Много данных в JSON

    Подходит

    Работает через вычисляемые колонки; PostgreSQL с jsonb удобнее.

  • Поиск по сайту

    Подходит

    Встроенного полнотекстового поиска хватает для простых случаев; дальше — Meilisearch.

  • Геоданные и карты

    Другой язык

    PostgreSQL с PostGIS.

  • ИИ-поиск по векторам

    Другой язык

    PostgreSQL с pgvector: индексы в открытой версии.

  • Сложная предметная область со строгими правилами

    Другой язык

    PostgreSQL: богаче типы, миграции в транзакции.

  • Аналитика по миллиардам событий

    Другой язык

    ClickHouse: колоночное хранение.

Экосистема MySQL: инструменты для частых задач

Средняя колонка — то, что идёт вместе с самой MySQL.

ЗадачаВстроеноИнструменты
Резервные копии mysqldump, MySQL Shell Percona XtraBackup
Изменение схемы на ходу ALGORITHM=INSTANT gh-ost, pt-online-schema-change
Маршрутизация подключений MySQL Router ProxySQL
Отказоустойчивость Group Replication, InnoDB Cluster Orchestrator
Шардинг — Vitess, PlanetScale
Медленные запросы slow query log, EXPLAIN ANALYZE pt-query-digest
Мониторинг Performance Schema, sys PMM, mysqld_exporter
Администрирование mysql, MySQL Shell phpMyAdmin, Adminer, DBeaver
Миграции — Flyway, Liquibase, Atlas

Пределы MySQL: где она упирается

  1. Неудачная миграция

    Изменения схемы не откатываются вместе с транзакцией — наполовину применённую миграцию чинят руками.

  2. Большой ALTER на нагруженной таблице

    Не каждое изменение мгновенное; для остальных — gh-ost, чтобы сайт не вставал.

  3. Случайные первичные ключи

    InnoDB хранит строки в порядке ключа; случайные UUID разбрасывают вставки и раздувают таблицу.

  4. Аналитика в основной базе

    Тяжёлые отчёты тормозят сайт; им место на реплике или в колоночной базе.

  5. Данные сложнее таблиц

    Геоданные, векторы и сложные типы подталкивают проект к PostgreSQL.

  6. Остаться на 8.0

    После апреля 2026 года она не получает исправлений безопасности — переход на 8.4 нужно планировать.

8 советов, как работать с MySQL

  1. 01

    utf8mb4 везде

    Старая utf8 не хранит эмодзи и часть символов; utf8mb4 — настоящая UTF-8.

  2. 02

    Строгий режим включён

    Неверные данные должны быть ошибкой, а не молча обрезанными значениями.

  3. 03

    Короткие растущие первичные ключи

    BIGINT AUTO_INCREMENT или UUID, упорядоченные по времени, — не случайные.

  4. 04

    Журнал медленных запросов

    Он показывает, что оптимизировать; pt-query-digest собирает его в отчёт.

  5. 05

    EXPLAIN ANALYZE перед индексом

    Смотрите настоящий план, а индекс перед удалением сначала прячьте.

  6. 06

    Горячие резервные копии

    XtraBackup копирует работающую базу без остановки; восстановление проверяйте регулярно.

  7. 07

    Отчёты — на реплике

    Тяжёлое чтение не спорит с сайтом за главный сервер.

  8. 08

    Спланируйте переход на 8.4

    Проверьте удалённые настройки и плагины на копии, прежде чем обновлять рабочую базу.

Как выглядит MySQL: 3 примера SQL

Отчёт с оконной функцией, изменение схемы без остановки и чтение плана запроса. Проверены на MySQL 8.4.

Отчёт с оконной функцией

Два лучших товара в каждой категории одним запросом — то, что раньше писали циклами в коде.

top_products.sql
-- два лучших товара по выручке в каждой категории: CTE и оконная функция
CREATE TABLE sales (
    product  VARCHAR(40)   NOT NULL,
    category VARCHAR(20)   NOT NULL,
    revenue  DECIMAL(10,2) NOT NULL CHECK (revenue >= 0)
);
INSERT INTO sales VALUES
    ('Дубовый стол', 'столы', 120000), ('Сосновый стол', 'столы', 45000), ('Стеклянный стол', 'столы', 80000),
    ('Дубовый стул', 'стулья', 30000),  ('Барный стул', 'стулья', 52000);

WITH ranked AS (
    SELECT product, category, revenue,
           RANK() OVER (PARTITION BY category ORDER BY revenue DESC) AS place
    FROM sales
)
SELECT category, product, revenue
FROM ranked
WHERE place <= 2
ORDER BY category, place;
-- столы | Дубовый стол | 120000.00
-- столы | Стеклянный стол | 80000.00
-- стулья | Барный стул | 52000.00
-- стулья | Дубовый стул | 30000.00

Изменение схемы без остановки

Мгновенная новая колонка и невидимый индекс — безопасный способ проверить, нужен ли ещё индекс.

schema.sql
CREATE TABLE orders (
    id         BIGINT AUTO_INCREMENT PRIMARY KEY,
    email      VARCHAR(190) NOT NULL,
    created_at DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX orders_email_idx (email)
);

-- новая колонка без перезаписи таблицы: мгновенно даже на миллионах строк
ALTER TABLE orders ADD COLUMN source VARCHAR(30) NULL, ALGORITHM=INSTANT;

-- перед удалением индекс прячут: если запросы замедлятся, его возвращают
ALTER TABLE orders ALTER INDEX orders_email_idx INVISIBLE;
ALTER TABLE orders ALTER INDEX orders_email_idx VISIBLE;

SELECT index_name, is_visible FROM information_schema.statistics
WHERE table_schema = DATABASE() AND table_name = 'orders' AND index_name = 'orders_email_idx';
-- orders_email_idx | YES

Чтение плана запроса

EXPLAIN ANALYZE показывает, что запрос идёт по индексу, а не читает всю таблицу.

explain.sql
-- EXPLAIN ANALYZE выполняет запрос и показывает, куда ушло время
INSERT INTO orders (email) VALUES ('[email protected]'), ('[email protected]'), ('[email protected]');

EXPLAIN ANALYZE
SELECT id, created_at FROM orders WHERE email = '[email protected]';
-- -> Index lookup on orders using orders_email_idx (email='[email protected]')

Вопросы о MySQL

MySQL бесплатная?

Редакция Community бесплатна по GPL v2. Oracle дополнительно продаёт Enterprise с инструментами и поддержкой.

Какую версию использовать?

8.4, долгосрочную. Поддержка 8.0 закончилась в апреле 2026 года.

MySQL или MariaDB?

Для CMS на хостинге подойдёт любая. Они разошлись, поэтому проекту, написанному под одну, могут понадобиться правки под другую.

MySQL или PostgreSQL?

MySQL — для CMS, виртуального хостинга и простых данных; PostgreSQL — для сложных данных, сервисов и ИИ-поиска.

Выдержит ли MySQL высокую нагрузку?

Да: на ней работают GitHub и Shopify, реплики масштабируют чтение, а Vitess — запись по горизонтали.

Поддерживает ли MySQL JSON?

Да, тип JSON с функциями; поля индексируют через вычисляемые колонки.

Почему эмодзи сохраняются вопросительными знаками?

В таблице старая кодировка utf8; переходите на utf8mb4.

Как сделать копию MySQL, не останавливая сайт?

Percona XtraBackup или выгрузки MySQL Shell копируют работающую базу; восстановление копии проверяйте.

Форма

Базы данных
на MySQL

Работаю с MySQL в своих проектах: проектирую схему, ускоряю медленные запросы, настраиваю индексы, репликацию и резервные копии, переношу данные между MySQL и PostgreSQL. Расскажите о задаче — отвечу в течение рабочего дня.

Или пишите на [email protected]