Выпуск СУБД MySQL 9.1.0

Компания Oracle сформировала новую ветку СУБД MySQL 9.1.0. Сборки MySQL Community Server 9.1.0 подготовлены для всех основных дистрибутивов Linux, FreeBSD, macOS и Windows. В рамках внедрённой в прошлом году новой модели формирования релизов, MySQL 9.1 отнесён к веткам “Innovation”, к которым также будет отнесён следующий значительный релиз MySQL 9.2. Innovation-ветки рекомендованы для тех, кто хочет раньше получать доступ к новой функциональности, публикуются каждые 3 месяца и поддерживаются только до публикации следующего значительного релиза (например, после появления ветки 9.1 прекращена поддержка ветки 9.0). Летом следующего года планируют сформировать LTS-релиз, рекомендованный для внедрений, которым необходима предсказуемость и длительное сохранение неизменного поведения. Следом за LTS-веткой будет сформирована новая Innovation-ветка – MySQL 10.0.

Основные изменения в MySQL 9.1:

  • В операцию “CREATE VIEW” добавлена поддержка выражения “IF NOT EXISTS”, позволяющего организовать создание представления только если представления с указанным именем ещё не существует и избежать возвращения ошибки, если представление уже создано.
  • Прекращена загрузка триггеров при выполнении операций, связанных только с чтением. Ранее триггеры загружались при любом доступе к таблице, что приводило к расходованию памяти и созданию нагрузки на CPU в ситуациях, когда триггеры не использовались (например, при выполнении запросов SELECT). В MySQL 9.1 обработка и загрузка триггеров разделена на две стадии: чтение метаданных о триггере и разбор+выполнение траггера. Данные, полученные на первой стадии сохраняются один раз и затем совместно используются в различных экземплярах триггера. Разбор и выполнение триггера производится только для выражений, приводящих к изменению данных. Кроме того, для сокращения потребления памяти вместо статического выделения буферов для обработки ошибок в триггерах осуществлён переход к динамическому выделению памяти по необходимости.
  • Расширен вывод операции “EXPLAIN”, в котором теперь отображаются сведения об использовании многодиапазонного чтения (multi-range) и применении стратегии полуобъединения (semijoin), при которой при операциях JOIN обрабатываются строки только из одной таблицы.
  • Обеспечено атомарное выполнение операций “CREATE DATABASE” и “DROP DATABASE” для защиты от сбоев в случае аварийного завершения или возникновения ошибок на уровне файловой системы во время выполнения данных операций. Например, ранее при аварийном завершении “CREATE DATABASE” могла быть сформирована неполная нерабочая структура хранилища БД, для очистки которой требовалось ручное вмешательство.
  • В написанных на JavaScript хранимых процедурах обеспечена поддержка типа VECTOR. Данные с указанным типом теперь могут передаваться во входных и возвращаемых параметрах.
  • Добавлена возможность аутентификации при подключении к СУБД с использованием протокола OpenID Connect.
  • Устранено 27 уязвимостей, самой серьёзной из которых (CVE-2024-5535) присвоен критический уровень опасности (9.1 из 10). Уязвимость может быть эксплуатирована удалённо без прохождения аутентификации. Проблема вызвана чтением данных из области вне выделенного буфера в библиотеке OpenSSL и приводит к аварийному завершению или утечке содержимого памяти в ответе после соединения с сервером с указанием некорректных параметров протокола.
Release. Ссылка here.