Открыть сервисСервис

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).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru