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

Обновлено: 24 июня 2026 г. в 16:23

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

средний

История MySQL, роль в LAMP-стеке, InnoDB и другие движки хранения, DDL/DML-путь запроса, репликация, MySQL Cluster, Vitess и эксплуатационные границы платформы.

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

В инженерной практике глава помогает связать поведение InnoDB, кластеризованных индексов, реплик для чтения и отставания репликации с конкретным профилем нагрузки.

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

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

Дизайн с учётом движка

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

Стратегия масштабирования чтения

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

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

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

Позиция на интервью

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

Рамка выбора и редакторский фокус

Фокус главы

эволюции движков хранения MySQL и масштабировании реляционных нагрузок

Профиль нагрузки

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

Когда выбирать

Глава должна отвечать, почему этот движок хорош именно для операционного контура, транзакционной обработки OLTP, кэша или модели с преобладанием записи.

Граница и риск

Нельзя обещать универсальность: каждая СУБД имеет цену в консистентности, миграциях, памяти, индексах или операционной дисциплине.

Связать дальше

Сравнивайте с фреймворком выбора СУБД, репликацией/шардингом и соседними операционными движками.

Источник

MySQL

История MySQL, LAMP-стек, движки хранения, репликация и экосистема масштабирования.

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

MySQL — это и , которую чаще всего берут как транзакционную основу веб-приложений. И почти всё, что здесь придётся решать, упирается в , и .

Эксплуатационная часть MySQL строится вокруг , , , и понятного пути к .

Для проектирования схемы важны , , и .

MySQL начиналась как быстрый движок для веба и долго славилась скоростью чтения, а не строгими гарантиями. Транзакции, внешние ключи и предсказуемое поведение под нагрузкой пришли позже — вместе с InnoDB. Поэтому выбор здесь почти всегда сводится к движку хранения и к тому, как платформа будет масштабироваться, когда одной машины перестанет хватать.

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

1995

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

23 мая 1995 года выходит первый релиз MySQL; проект быстро набирает популярность в веб-приложениях.

2000

MySQL AB и двойная лицензия

Формируется компания MySQL AB и модель, где GPL сочетается с коммерческой лицензией для корпоративных сценариев.

2003 (4.0)

MySQL 4.0

Платформа дорастает до массовых веб-приложений и закрепляется как буква M в стеке LAMP (Linux, Apache, MySQL, PHP).

2005 (5.0)

MySQL 5.0

Появляются хранимые процедуры, триггеры и представления — логику можно держать ближе к данным, а не только в приложении. Модель языка запросов SQL заметно взрослеет.

2008

Покупка Sun Microsystems

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

2009-2010

Ответвление MariaDB и переход к Oracle

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

2010 (5.5)

InnoDB становится движком по умолчанию

В ветке MySQL 5.5 InnoDB становится основным движком хранения, усиливая транзакционные гарантии MySQL.

2013 (5.6)

MySQL 5.6

Подтягиваются репликация и эксплуатация: глобальные идентификаторы транзакций (GTID) упрощают переключение и сборку топологии, растёт производительность InnoDB.

2015 (5.7)

MySQL 5.7

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

2018 (8.0)

MySQL 8.0

Крупный шаг: общие табличные выражения (CTE), оконные функции и транзакционный словарь данных — аналитические запросы пишутся без обходных приёмов, а метаданные перестают жить отдельно от транзакций.

2024+ (8.4 LTS)

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

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

MySQL в LAMP-стеке

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

L

Linux

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

A

Apache

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

M

MySQL

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

P

PHP / Perl / Python

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

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

MySQL делит ответственность между клиентским слоем, SQL-слоем, движками хранения и системным уровнем ОС и файловой системы. Граница между SQL-слоем и движком — ключевая: именно она позволяет менять движок таблицы, не переписывая запросы приложения.

Клиенты и соединения
MySQL protocolJDBC / ODBCАутентификация + TLSПул соединений
Переход между слоями
SQL-слой
Разбор запросаОптимизаторИсполнительМетаданныеПрава доступа
Переход между слоями
Движки хранения
InnoDBMyISAMNDBMemory/CSV
Переход между слоями
ОС и инфраструктура
ОСФайловая системаДискСеть
Сервисные подсистемы

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

Журналы

Двоичный журналRedo/Undo (InnoDB)

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

Performance SchemaInformation SchemaМетрики состояния

Репликация

Ведущий узел и репликиПолусинхронный режимGTID

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

DDL меняет схему и метаданные, DML работает с данными и индексами. Различать их важно на практике: тяжёлый DDL на большой таблице способен надолго заблокировать запись, поэтому такие изменения и выносят в онлайн-режим. Ниже — этапы для обоих типов запросов.

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

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

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

Активный шаг

1. Разбор и оптимизация

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

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

  • DML затрагивает данные и индексы, но не меняет структуру.
  • Основная нагрузка — кеш, журналы и блокировки строк.
  • Часто оптимизируется через индексы и выбор плана.
Операции со строкамиДвоичный журналФиксация транзакции

Эволюция движков хранения

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

InnoDB (по умолчанию)

Транзакционный движок хранения: даёт строгие гарантии, внешние ключи, журналы Redo/Undo для восстановления после сбоя и кластеризованные индексы. Это выбор по умолчанию почти для всех новых таблиц.

MyISAM (устаревающий)

Исторический движок без транзакций и с блокировкой всей таблицы на запись. На рабочих данных он опасен; держать его стоит разве что для понимания того, откуда выросла MySQL.

NDB Cluster

Распределённый движок для MySQL Cluster: узлы не делят общий диск и координируют данные между собой. Платой за отказоустойчивость становится отдельная операционная модель, которая мало похожа на привычную одиночную MySQL.

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

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

Vitess: шардирование для MySQL

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

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

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

Репликация

Встроенная репликация разгружает чтение и готовит переключение на резерв. Асинхронный режим быстрее, но допускает отставание реплик; полусинхронный сужает окно потери данных ценой задержки на запись.

MySQL Cluster (NDB)

Кластер на NDB распределяет данные между узлами без общего хранилища и переживает потерю узла. Взамен он требует другой эксплуатации и подходит не любому профилю нагрузки.

Vitess

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

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

Клиенты

Приложения

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

VTGate

MySQL

Шарды

Ведущий узел и реплики

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

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