System Design Space
Граф знанийНастройки

Обновлено: 25 марта 2026 г. в 02:00

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

medium

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

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

В инженерной практике глава полезна, когда нужно увязать поведение InnoDB, clustered index, read replicas и лаг репликации с конкретной моделью нагрузки, а не обсуждать MySQL как абстрактную реляционную систему.

На интервью и в архитектурных ревью она помогает честно проговорить границы: где MySQL полностью закрывает OLTP-задачу, а где multi-region, сложная аналитика или жесткие требования к горизонтальному росту подталкивают к другим вариантам.

Практическая польза главы

Engine-aware design

Учитывайте особенности InnoDB и clustered index при моделировании таблиц, ключей и транзакционных сценариев.

Read-scale стратегия

Стройте read replicas и topology failover с учетом lag и требований к консистентности чтений.

Эволюция схемы

Планируйте online-migrations и backward-compatible изменения, чтобы не ломать высоконагруженный прод.

Interview позиция

Показывайте, когда MySQL достаточно, а когда нужны альтернативы для multi-region или аналитических нагрузок.

Источник

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 затрагивает данные и индексы, но не меняет структуру.
  • Основная нагрузка — кеш, журналы и блокировки строк.
  • Часто оптимизируется через индексы и выбор плана.
Операции со строкамиBinary 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

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки