System Design Space

    Глава 108

    Обновлено: 15 февраля 2026 г. в 08:15

    MySQL: история, движки и масштабирование

    Прогресс части0/12

    История MySQL, участие в LAMP‑стеке, эволюция storage engines и подходы к масштабированию (Cluster, Vitess).

    Источник

    MySQL

    История MySQL, LAMP-стек, эволюция версий и ключевые особенности.

    Перейти на сайт

    MySQL — одна из самых популярных реляционных СУБД. Она начиналась как простой и быстрый движок, стала частью LAMP-стека, а затем получила транзакционные возможности, гибкую модель storage engines и экосистему масштабирования.

    История и вехи развития

    1995

    Первый релиз MySQL

    Публикуется первый релиз MySQL (23 мая 1995), проект начинает быстро набирать популярность в web-нагрузках.

    2000

    MySQL AB и dual licensing

    Формируется компания MySQL AB и модель GPL + коммерческая лицензия для enterprise-сценариев.

    2003 (4.0)

    MySQL 4.0

    Стабилизируется платформа для массового web-use-case; MySQL закрепляется как часть LAMP-стека.

    2005 (5.0)

    MySQL 5.0

    Появляются stored procedures, triggers и views — важный шаг к более зрелой SQL-модели.

    2008

    Покупка Sun Microsystems

    Sun приобретает MySQL AB и получает контроль над одним из ключевых open-source SQL-продуктов.

    2009-2010

    Fork в MariaDB и переход к Oracle

    На фоне сделки Sun/Oracle запускается форк MariaDB; в 2010 Oracle завершает покупку Sun.

    2010 (5.5)

    InnoDB становится default

    В ветке MySQL 5.5 движок InnoDB становится основным по умолчанию, усиливая ACID-позиционирование.

    2013 (5.6)

    MySQL 5.6

    Улучшаются репликация и эксплуатационные возможности (в том числе GTID и производительность InnoDB).

    2015 (5.7)

    MySQL 5.7

    Добавляются JSON-функции, generated columns и улучшения оптимизатора для mixed workload.

    2018 (8.0)

    MySQL 8.0

    Крупный технологический апдейт: CTE, window functions, transactional data dictionary и дальнейшая модернизация ядра.

    2024+ (8.4 LTS)

    Новая модель релизов

    Появляется LTS-линейка (8.4), а развитие идет через innovation-ветки и последующие мажорные релизы.

    MySQL в LAMP-стеке

    LAMP — классический стек для веб-приложений: Linux + Apache + MySQL + PHP/Perl/Python.

    L

    Linux

    Операционная система для серверов и веб-хостинга.

    A

    Apache

    HTTP-сервер, обслуживающий веб-запросы.

    M

    MySQL

    Реляционная база данных для хранения и обработки данных.

    P

    PHP / Perl / Python

    Языки серверной логики и шаблонов приложения.

    Архитектура MySQL по слоям

    Классическая архитектура MySQL делит ответственность между клиентским слоем, SQL-слоем, storage engines и системным уровнем ОС/файловой системы.

    Клиенты и соединения
    MySQL protocolJDBC / ODBCAuth + TLSConnection pool
    Переход между слоями
    SQL слой
    ParserOptimizerExecutorMetadataPrivileges
    Переход между слоями
    Движки хранения
    InnoDBMyISAMNDBMemory/CSV
    Переход между слоями
    OS + железо
    OSFilesystemDiskNetwork
    Сервисные подсистемы

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

    Журналы

    Binary logRedo/Undo (InnoDB)

    Наблюдаемость

    Performance SchemaInformation SchemaStatus metrics

    Replication

    Primary-ReplicaSemi-syncGTID

    DDL vs DML: как проходит запрос

    DDL меняет схему и метаданные, а DML работает с данными и индексами. Ниже — визуализация ключевых этапов для обоих типов запросов.

    Как запрос проходит через MySQL

    Сравнение цепочки для DDL (структура) и DML (данные)

    Интерактивный прогонШаг 1/5

    Активный шаг

    1. Parse + optimize

    Оптимизатор строит план выполнения и выбирает индексы.

    Работа с данными

    • DML затрагивает данные и индексы, но не меняет структуру.
    • Основная нагрузка — кеш, журналы и блокировки строк.
    • Часто оптимизируется через индексы и выбор плана.
    Row-level operationsBinary logTransaction commit

    Эволюция storage engines

    MySQL поддерживает несколько движков хранения, позволяя выбирать подходящий для разных типов таблиц.

    InnoDB (default)

    Транзакционный движок с поддержкой ACID и внешних ключей; в MySQL 5.5 дефолтный storage engine — InnoDB.

    MyISAM (legacy)

    Один из встроенных storage engines MySQL, доступный наряду с другими движками.

    NDB Cluster

    Движок для MySQL Cluster: shared-nothing кластеризация.

    В списке встроенных движков также есть Memory, Archive, CSV, Federated, Blackhole и другие.

    Документация

    Vitess: sharding для MySQL

    Как Vitess делит keyspace на шарды и маршрутизирует запросы к MySQL.

    Перейти на сайт

    Масштабирование: репликация, Cluster, Vitess

    Репликация

    Встроенная репликация поддерживает асинхронные и semi-sync сценарии для масштабирования чтений.

    MySQL Cluster (NDB)

    Shared-nothing кластеризация через MySQL Cluster на базе NDB-движка.

    Vitess

    Слой шардирования: ключевое пространство может быть разбито на шардированные MySQL-базы, где у каждого шарда есть primary и реплики.

    Вариант архитектуры с Vitess: запросы идут через слой маршрутизации к нескольким MySQL-шарам.

    Клиенты

    Приложения

    Маршрутизация

    VTGate

    MySQL

    Шарды

    Primary + replicas