MySQL 8
MySQL 8 — это реляционная система управления базами данных (СУБД) с открытым исходным кодом, выпущенная корпорацией Oracle в апреле 2018 года. Она относится к семейству MySQL, является одной из самых популярных в мире систем управления базами данных, используемой для веб-приложений (в частности, в составе стека LAMP), корпоративных решений и облачных сервисов. Версия 8 представляет собой крупное обновление, которое заменило предыдущую стабильную линию MySQL 5.7 и привнесло значительные изменения в архитектуру, производительность и функциональность.
История и развитие
Первая публичная версия MySQL была выпущена в 1995 году шведской компанией MySQL AB. В 2008 году компания была приобретена Sun Microsystems, а в 2010 году, после поглощения Sun, MySQL перешла под контроль корпорации Oracle. До выхода версии 8 основные обновления долгое время выпускались в рамках ветки 5.x (MySQL 5.0 — 2005 год, MySQL 5.7 — 2015 год).
Разработка MySQL 8 началась вскоре после стабилизации MySQL 5.7. Ключевым этапом стал выпуск версии 8.0.0 (иногда называемой Development Milestone Release) в сентябре 2016 года. Полный функционал и официальный статус General Availability (GA) были объявлены 19 апреля 2018 года. Нумерация была «перескочена» с 5.7 на 8.0, чтобы подчеркнуть фундаментальный характер изменений и разрыв обратной совместимости в ряде подсистем.
Архитектура и ключевые нововведения
MySQL 8 отличается от предыдущих версий переработанной архитектурой хранения данных и новым словарём данных (Data Dictionary).
Словарь данных
В MySQL 8 был внедрён словарь данных на основе InnoDB. Ранее метаданные таблиц (структура, определения) хранились в файлах с расширением .frm. В версии 8 вся информация об объектах базы данных (таблицы, представления, хранимые процедуры) хранится внутри транзакционных таблиц InnoDB. Это позволило:
- Улучшить согласованность метаданных.
- Поддержать атомарные операции DDL (Data Definition Language) — создание, изменение и удаление схем и таблиц стало полностью транзакционным. Если DDL-операция прерывается на середине (например, из-за сбоя), база данных возвращается к предыдущему состоянию.
- Упростить управление репликацией и резервным копированием.
Механизм хранения InnoDB
InnoDB остаётся основным и рекомендуемым механизмом (storage engine). В MySQL 8 он получил существенные улучшения:
- Автоматическая очистка (Auto-purge): теперь процесс очистки «мёртвых» версий строк (оставшихся от транзакций) выполняется параллельно и более эффективно.
- Поддержка таблиц с большим количеством буферов (Large Buffer Pool): улучшена работа с буферными пулами размером в десятки терабайт.
- Атомарные DDL: изменения схемы данных, включая операции с таблицами (ALTER TABLE), стали транзакционными и не оставляют «мусора» в файловой системе при сбоях.
Индексы и производительность
- Поддержка индексов с нисходящим порядком сортировки (Descending Indexes): в MySQL 5.7 и старше индексы, хотя и могли объявляться как
DESC, фактически создавались по возрастанию. В MySQL 8 появилась возможность создавать индексы, эффективно оптимизирующие запросы с сортировкойORDER BY ... DESCи запросы, использующие составные индексы с разной сортировкой столбцов. - Невидимые индексы (Invisible Indexes): администраторы могут «скрыть» индекс от оптимизатора без его физического удаления. Это позволяет тестировать производительность запросов без индекса и при необходимости быстро вернуть его, не тратя время на перестроение.
- Partial UPDATE для JSON: частичное обновление JSON-документов теперь выполняется быстрее, без перезаписи всего столбца.
Новые возможности SQL
MySQL 8 значительно расширил стандарт SQL, приблизившись к возможностям коммерческих СУБД, таких как Oracle Database или PostgreSQL.
Оконные функции (Window Functions)
Введены оконные функции: ROW_NUMBER(), RANK(), DENSE_RANK(), LEAD(), LAG(), FIRST_VALUE(), LAST_VALUE(), NTILE(), PERCENT_RANK(), CUME_DIST(). Они позволяют выполнять вычисления над наборами строк (окнами) без группировки результата в одну строку.
Общие табличные выражения (Common Table Expressions, CTE)
Реализован синтаксис WITH ... AS (...) как нерекурсивных (например, для упрощения сложных подзапросов), так и рекурсивных CTE. Рекурсивные CTE позволяют эффективно работать с иерархическими данными (например, с деревьями категорий или организационной структурой).
Функции для JSON
Расширена поддержка работы с JSON-документами: добавлены функции JSON_TABLE() (преобразует JSON в реляционную таблицу), JSON_ARRAYAGG(), JSON_OBJECTAGG(), а также улучшена производительность операций поиска внутри JSON-столбцов за счёт виртуальных индексов.
Типы данных
- LONGTEXT, LONGBLOB: ограничения на максимальный размер стали менее строгими.
- TEXT и BLOB: значения по умолчанию для таких столбцов могут быть неявно преобразованы.
- Возможность обнуления (DEFAULT NULL): теперь можно задавать явный
DEFAULT NULLдля столбцов в любых механизмах хранения.
Безопасность и аутентификация
Механизм аутентификации
По умолчанию используется плагин caching_sha2_password (заменивший mysql_native_password). Он обеспечивает более надёжное хранение паролей и защиту от атак перебором. Для обратной совместимости с клиентами, не поддерживающими новый протокол, можно использовать механизм mysql_native_password.
Роли и привилегии
Введено управление ролями (Roles). Роль представляет собой именованный набор привилегий. Администратор может создавать роли, назначать их пользователям и управлять иерархией привилегий. Реализован синтаксис CREATE ROLE, DROP ROLE, GRANT ROLE, SET DEFAULT ROLE.
Управление паролями
- Установка требований к сложности паролей (политики
validate_password). - Настройка срока действия пароля (
DEFAULT PASSWORD EXPIRE). - Запрет повторного использования старых паролей.
Управление конфигурацией и мониторинг
Компонентная архитектура
MySQL 8 использует модель компонентов. Вместо плагинов теперь можно подключать отдельные компоненты (например, для аудита, шифрования, мониторинга). Компонент AUDIT заменяет старый плагин аудита и предоставляет более гибкие возможности логирования.
Performance Schema
Доработанная система Performance Schema (P_S) позволяет в реальном времени отслеживать выполнение запросов, использование памяти, блокировки и события ожидания. Она стала быстрее и использует меньше ресурсов.
Глобальные блокировки
Введён тип блокировки INSTANCE (экземпляр), который можно использовать в пользовательских скриптах для координации работы приложений.
Репликация и кластеризация
Asynchronous Replication (Групповая репликация)
Улучшенная репликация на основе групп (Group Replication) появилась в MySQL 5.7, но в версии 8 была значительно стабилизирована. Она обеспечивает отказоустойчивость и автоматическое восстановление на нескольких узлах.
Snapshot-based replication
Репликация с использованием снапшотов (MySQL Clone Plugin — с версии 8.0.17). Позволяет быстро клонировать базу данных для создания новых реплик без длительного дампа и восстановления.
GTID (Global Transaction Identifiers)
Использование GTID стало обязательным по умолчанию. Это упрощает настройку и управление логическими копиями.
Применение
MySQL 8 используется как в малых, так и в крупных проектах:
- Веб-приложения: WordPress, Drupal, Joomla, OpenCart.
- Облачные сервисы: Amazon RDS, Google Cloud SQL, Яндекс.Облако (Managed Service for MySQL).
- Корпоративные системы: ERP, CRM, системы учёта.
- Подсистемы хранения: часто применяется как front-end для веб-серверов, работающих совместно с Apache или Nginx.
Лицензирование и распространение
MySQL 8 распространяется под двойной лицензией:
- GNU General Public License (GPL): бесплатная версия Community Edition со всем функционалом, подходит для большинства открытых проектов.
- Коммерческая лицензия (Enterprise Edition): включает дополнительные компоненты (MySQL Enterprise Monitor, MySQL Audit, MySQL Enterprise Encryption, MySQL Enterprise Backup), техническую поддержку и гарантии для корпоративных пользователей.
Версии и жизненный цикл
Основные выпуски MySQL 8:
- 8.0.11 (GA): 19 апреля 2018 года — первая стабильная версия.
- 8.0.22 (октябрь 2020): добавлена поддержка выражений
FULL OUTER JOINчерез CTE. - 8.0.27: улучшена производительность для больших таблиц.
- 8.0.33: исправлены уязвимости безопасности.
- 8.0.35 (декабрь 2023): последнее обновление безопасности для ветки 8.0.
По состоянию на начало 2024 года официальная поддержка MySQL 8.0 завершилась, и Oracle рекомендовала переходить на MySQL 8.4 LTS (выпущен в апреле 2024 года). Однако MySQL 8.0 остаётся активно используемой версией во многих проектах.
Критика
Несмотря на широкое распространение, MySQL 8 подвергался критике по ряду направлений:
- Неполная поддержка стандарта SQL в сравнении с PostgreSQL (например, отсутствие материализованных представлений, ограниченная поддержка рекурсивных запросов, отсутствие триггеров на операторы SQL).
- Проблемы с обратной совместимостью: переход с MySQL 5.7 на 8 потребовал изменения настроек, переписывания части приложений из-за изменения поведения DDL и схемы хранения.
- Сложность управления: компонентная архитектура и новые механизмы аутентификации усложнили процесс настройки.
- Снижение производительности в некоторых сценариях: новый словарь данных InnoDB привёл к увеличению накладных расходов на операции с метаданными при большом количестве таблиц (тысячи или миллионы).
- Проблемы с прозрачностью: версия Community Edition урезана в некоторых возможностях по сравнению с Enterprise Edition (например, отсутствие фирменного мониторинга).
Источники
- Oracle. MySQL 8.0 Release Notes — официальная документация.
- Baron Schwartz, Peter Zaitsev, Vadim Tkachenko. «High Performance MySQL» — 4-е издание, разделы по версии 8.0.
- Документация Oracle по MySQL 8.0: система словарей данных, оконные функции, CTE.
- Сообщество MySQL (MySQL Community Team) — блоги по обновлениям.
- Статьи на Habr (пользовательские обзоры и сравнения MySQL 5.7 vs 8.0).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →