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

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

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

  • В утилиту mysqldump добавлена опция “–users” для создания логических дампов с информацией о всех учётных записях, выводимой через SQL-выражения “CREATE USER” и “GRANT”. Для вставки выражения “DROP USER” перед “CREATE USER” предусмотрена опция “–add-drop-user”, а для выборочного отражения в дампе отдельных пользователей – опции “–include-user=user@host” и “–exclude-user=user@host”, который можно указывать несколько раз.
  • В движке MLE (Multilingual Engine Component), позволяющем использовать в хранимых процедурах и функциях код на языках, отличных от SQL, улучшена поддержка JavaScript.
    Для хранимых процедур на языке JavaScript реализован тип “DECIMAL“, который можно использовать для входящих и возвращаемых аргументов. По умолчанию для безопасности MySQL-тип DECIMAL преобразуется в JavaScript-тип “String”, но данное поведение можно переопределить командой ‘SELECT mle_set_session_state(‘{“decimal_type”:”Number”}’)’, после которой будет использован JavaScript-тип “Number”. Поддерживается приведение к типу DECIMAL значений с JavaScript-типами Boolean, Number, String и BigInt.
  • В хранимые процедуры на JavaScript добавлена поддержка выставления параметров локализации, используя JavaScript API Intl. Например для определения текущей локали можно использовать свойства “Intl.DateTimeFormat().resolvedOptions().locale”, а для переопределения локали – метод “toLocaleString()”.
  • Расширены возможности для управления библиотеками JavaScript: для изменения списка импортируемых библиотек теперь можно использовать выражения “ALTER PROCEDURE” и “ALTER FUNCTION“. Добавлена возможность использования выражения “ALTER LIBRARY” для добавления, удаления или изменения SQL-комментария к библиотеке. Для получения сведений о библиотеке реализовано выражение “SHOW LIBRARY STATUS“.
  • Добавлена поддержка динамической загрузки JavaScript-библиотек.
    Для динамического импорта библиотеки следует использовать ключевое слово “await”, например “let module = await import(‘/db1/lib_${object_type}’)”.
  • Расширены оптимизации запросов, использующих квантифицированные операторы сравнения. Помимо поддержки операторов “=ANY” и “<>ALL” при оптимизации подзапросов в новой версии добавлена поддержка операторов “>ANY”, “>=ANY”, “ALL”, “>=ALL”, ” Удалён плагин “version_tokens“, ранее объявленный устаревшим.
  • Запрещено выставление значения 0 в системную переменную replica_parallel_workers.
  • Устранено 28 уязвимостей, из которых 26 могут быть эксплуатированы удалённо при наличии доступа для отправки запросов к СУБД. Шесть наиболее серьёзных проблем имеют уровень опасности 6.5 и связаны с уязвимостями в движке InnoDB, парсере и оптимизаторе. Менее опасные уязвимости затрагивают mysqldump, InnoDB, оптимизатор, DDL, UDF, парсер и систему репликации.
Release. Ссылка here.