Spec-Zone.ru › MySQL 8.4

1.4 Что нового в MySQL 8.4 по сравнению с MySQL 8.0

В этом разделе суммируются добавленные, устаревшие, измененные и удаленные функции в MySQL 8.4 по сравнению с MySQL 8.0. В сопутствующем разделе перечислены параметры и переменные сервера MySQL, которые были добавлены, устарели или удалены в MySQL 8.4; см. Раздел 1.5, «Параметры и переменные сервера, добавленные, устаревшие или удаленные в MySQL 8.4 по сравнению с 8.0».

  • Добавленные или измененные функции в MySQL 8.4

  • Устаревшие функции в MySQL 8.4

  • Удаленные функции в MySQL 8.4

Функции, добавленные или измененные в MySQL 8.4

Следующие функции были добавлены в MySQL 8.4:

  • Изменения в аутентификации паролей MySQL. Начиная с MySQL 8.4.0, устаревший mysql_native_password плагин аутентификации больше не включен по умолчанию. Для его включения запустите сервер с параметром --mysql-native-password=ON (добавлено в MySQL 8.4.0), или включите mysql_native_password=ON в разделе [mysqld] вашего файла конфигурации MySQL (добавлено в MySQL 8.4.0).

    Для получения дополнительной информации об включении, использовании и отключении mysql_native_password см. Раздел 8.4.1.1, «Native Pluggable Authentication».

  • Изменения значений по умолчанию переменных системы InnoDB. Значения по умолчанию для ряда системных переменных сервера, относящихся к хранилищу InnoDB, были изменены в MySQL 8.4.0, как показано в следующей таблице:

    Таблица 1.1 Значения по умолчанию переменных системы InnoDB в MySQL 8.4, отличающиеся от MySQL 8.0

    Таблица 1.1 Значения по умолчанию переменных системы InnoDB в MySQL 8.4, отличающиеся от MySQL 8.0
    Имя переменной системы InnoDB Новое значение по умолчанию (MySQL 8.4) Предыдущее значение по умолчанию (MySQL 8.0)
    innodb_buffer_pool_in_core_file OFF если MADV_DONTDUMP поддерживается, в противном случае ON ON
    innodb_buffer_pool_instances

    Если innodb_buffer_pool_size <= 1 ГБ, то innodb_buffer_pool_instances=1

    Если innodb_buffer_pool_size > 1 ГБ, тогда это минимальное значение из следующих двух вычисленных значений в диапазоне от 1 до 64:

    • Подсказка к буферному пулу: Вычисляется как 1/2 от (innodb_buffer_pool_size / innodb_buffer_pool_chunk_size)

    • Подсказка к процессору: Вычисляется как 1/4 от числа доступных логических процессоров

    8 (или 1, если innodb_buffer_pool_size < 1 ГБ)
    innodb_change_buffering none all
    --innodb-dedicated-server Если ON[a], значение innodb_flush_method больше не меняется, как в MySQL 8.0, но вычисление innodb_redo_log_capacity изменено с памяти на процессор. Для получения дополнительной информации см. Раздел 17.8.12, «Включение автоматической конфигурации InnoDB для выделенного сервера MySQL». OFF
    innodb_adaptive_hash_index OFF ON
    innodb_doublewrite_files 2 innodb_buffer_pool_instances * 2
    innodb_doublewrite_pages 128 innodb_write_io_threads, что означало значение по умолчанию 4
    innodb_flush_method на Linux O_DIRECT если поддерживается, в противном случае fsync fsync
    innodb_io_capacity 10000 200
    innodb_io_capacity_max 2 * innodb_io_capacity 2 * innodb_io_capacity, с минимальным значением по умолчанию 2000
    innodb_log_buffer_size 67108864 (64 МБ) 16777216 (16 МБ)
    innodb_numa_interleave ON OFF
    innodb_page_cleaners innodb_buffer_pool_instances 4
    innodb_parallel_read_threads доступных логических процессоров / 8, с минимальным значением по умолчанию 4 4
    innodb_purge_threads 1, если доступных логических процессоров <= 16, иначе 4 4
    innodb_read_io_threads доступных логических процессоров / 2, с минимальным значением по умолчанию 4 4
    innodb_use_fdatasync ON OFF
    temptable_max_ram 3% от общего объема памяти, со значением по умолчанию в диапазоне от 1 до 4 ГБ 1073741824 (1 ГБ)
    temptable_max_mmap 0, что означает OFF 1073741824 (1 ГБ)
    temptable_use_mmap[b] OFF ON

    [a] Фактическое значение по умолчанию этой переменной - OFF; это не изменилось с MySQL 8.0.

    [b] Устарело в MySQL 8.0.26.


  • Плагин Clone. Требование к версии плагина clone было смягчено, чтобы разрешить клонирование между разными выпусками в одной серии. Другими словами, должны совпадать только основные и второстепенные номера версии, в то время как раньше должен был совпадать и номер точки выпуска.

    Например, теперь функциональность клонирования позволяет клонировать 8.4.0 в 8.4.14 и наоборот.

  • Аутентификация LDAP на основе SASL в Windows. В Microsoft Windows теперь поддерживается серверный плагин для аутентификации LDAP на основе SASL. Это означает, что клиенты Windows теперь могут использовать GSSAPI/Kerberos для аутентификации с помощью плагина authentication_ldap_sasl_client.

    Для получения дополнительной информации см. Аутентификацию LDAP на основе SASL (без проксирования).

  • Репликация MySQL: изменение SOURCE_RETRY_COUNT. Значение по умолчанию для параметра SOURCE_RETRY_COUNT оператора CHANGE REPLICATION SOURCE TO было изменено на 10. Это означает, что, используя значения по умолчанию для этого параметра и для параметра SOURCE_CONNECT_RETRY (60), реплика ждет 60 секунд между попытками подключения и продолжает попытки подключения с такой скоростью в течение 10 минут, прежде чем отменить и переключиться на резервный сервер.

    Это изменение также относится к значению по умолчанию устаревшего серверного параметра --master-retry-count. (Вместо этого следует использовать SOURCE_RETRY_COUNT.)

    Для получения дополнительной информации см. Раздел 19.4.9.1, «Асинхронный переход на резервный источник подключения».

  • Репликация MySQL: метки GTID. Формат глобальных идентификаторов транзакций (GIDs), используемых в MySQL Репликации и Групповой репликации, был расширен для возможности идентификации групп транзакций, позволяя присваивать уникальное имя GTID, относящимся к определённой группе транзакций. Например, транзакции, содержащие операции с данными, можно легко отличить от тех, которые возникают из административных операций, просто сравнив их GTID.

    Новый формат GTID — UUID:TAG:NUMBER, где TAG — строка длиной до 8 символов, что активируется установкой значения системной переменной gtid_next на AUTOMATIC:TAG, добавленной в этом релизе (см. описание переменной для формата тега и другой информации). Эта метка сохраняется для всех транзакций, исходящих из текущей сессии (если не изменена с помощью SET gtid_next), и применяется во время фиксации для таких транзакций или, при использовании Групповой репликации, во время сертификации. Также можно установить gtid_next на UUID:TAG:NUMBER, чтобы установить UUID отдельной транзакции в произвольное значение и присвоить ей пользовательскую метку. Присвоение UUID и NUMBER остаётся без изменений по сравнению с предыдущими релизами MySQL. В любом случае, пользователь несёт ответственность за обеспечение уникальности метки для данной топологии репликации.

    Исходный формат UUID:NUMBER для GTID по-прежнему поддерживается без изменений, как реализовано в предыдущих версиях MySQL; изменения существующих настроек репликации, использующих GTID, не требуются.

    Установка gtid_next на AUTOMATIC:TAG или UUID:TAG:NUMBER требует нового привилегия TRANSACTION_GTID_TAG, добавленного в этом релизе; это справедливо как для сервера происхождения, так и для PRIVILEGE_CHECKS_APPLIER для потока прикладного модуля репликации. Это также означает, что администратор теперь может ограничить использование SET @gtid_next=AUTOMATIC:TAG или UUID:TAG:NUMBER желаемым набором MySQL пользователей или ролей, так что только те пользователи, относящиеся к заданной области данных или операций, могут фиксировать новые транзакции с назначенными метками.

    Примечание

    При обновлении с предыдущей версии MySQL до MySQL 8.4 любые учётные записи пользователей или роли, которые уже имеют привилегию BINLOG_ADMIN, автоматически получают привилегию TRANSACTION_GTID_TAG.

    Встроенные функции GTID_SUBSET(), GTID_SUBTRACT() и WAIT_FOR_EXECUTED_GTID_SET() совместимы с помеченными GTID.

    Дополнительную информацию см. в описаниях системной переменной gtid_next и привилегии TRANSACTION_GTID_TAG, а также в Разделе 19.1.4, «Изменение режима GTID на онлайн-серверах».

  • Репликация: SQL_AFTER_GTIDS и MTA. Опция оператора START REPLICA SQL_AFTER_GTIDS теперь совместима с многопоточным прикладным модулем. (Ранее, при включенном MTA и попытке использования этой опции, оператор выдавал предупреждение, и реплика переключалась на однопоточный режим.) Это означает, что реплика, которой нужно наверстать пропущенные транзакции, теперь может сделать это, не теряя преимущества производительности от многопоточности.

    Дополнительную информацию см. в Разделе 15.4.2.4, «Оператор START REPLICA», а также в документации для системной переменной replica_parallel_workers. См. также Раздел 19.2.3.2, «Мониторинг потоков обработки репликации» и Раздел 25.7.11, «Репликация NDB кластера с использованием многопоточного прикладного модуля».

  • Обратная совместимость терминологии репликации. В этом релизе добавлена опция --output-as-version для mysqldump. Эта опция позволяет создать дамп с сервера MySQL 8.2 или более поздней версии, совместимый со старыми версиями MySQL; её значение, выбранное из перечисленных, определяет совместимость терминологии репликации в дампе:

    • SERVER: Определяет версию сервера и использует самые новые версии операторов репликации и имён переменных, совместимых с этой версией MySQL.

    • BEFORE_8_2_0: Вывод совместим с серверами MySQL, работающими на версиях от 8.0.23 до 8.1.0 включительно.

    • BEFORE_8_0_23: Вывод совместим с серверами MySQL, работающими на версиях до 8.0.23.

    Подробную информацию см. в описании этой опции.

    Кроме того, добавлено новое значение к уже разрешённым для системной переменной terminology_use_previous. BEFORE_8_2_0 заставляет сервер выводить DISABLE ON SLAVE (теперь устаревшее) вместо DISABLE ON REPLICA в выводе оператора SHOW CREATE EVENT. Существующее значение BEFORE_8_0_26 теперь также имеет этот эффект помимо уже имеющихся.

  • Номер версии MySQL, используемый в комментариях, специфичных для версии, поддерживает главную версию, состоящую из одной или двух цифр; это означает, что вся версия может иметь длину пять или шесть цифр. Дополнительную информацию о том, как это изменение влияет на обработку комментариев, специфичных для версии в MySQL, см. в Разделе 11.7, «Комментарии».

  • group_replication_set_as_primary() и операторы DDL. Функция group_replication_set_as_primary() ожидает завершения текущих операторов DDL, таких как ALTER TABLE, при ожидании завершения всех транзакций перед выбором нового первичного сервера.

    Дополнительную информацию см. в описании этой функции.

  • Отслеживание заявок DDL и DCL для group_replication_set_as_primary(). group_replication_set_as_primary() теперь ожидает завершения следующих заявок перед выбором нового первичного сервера:

    • ALTER DATABASE

    • ALTER FUNCTION

    • ALTER INSTANCE

    • ALTER PROCEDURE

    • ALTER SERVER

    • ALTER TABLESPACE

    • ALTER USER

    • ALTER VIEW

    • CREATE DATABASE

    • CREATE FUNCTION

    • CREATE PROCEDURE

    • CREATE ROLE

    • CREATE SERVER

    • CREATE SPATIAL REFERENCE SYSTEM

    • CREATE TABLESPACE

    • CREATE TRIGGER

    • CREATE USER

    • CREATE VIEW

    • DROP DATABASE

    • DROP FUNCTION

    • DROP PROCEDURE

    • DROP ROLE

    • DROP SERVER

    • DROP SPATIAL REFERENCE SYSTEM

    • DROP TABLESPACE

    • DROP TRIGGER

    • DROP USER

    • DROP VIEW

    • GRANT

    • RENAME TABLE

    • REVOKE

    Эти запросы дополняют запросы, добавленные в MySQL 8.1 или уже поддерживаемые в этом отношении. Для получения дополнительной информации, включая список всех таких запросов, поддерживаемых в MySQL 8.3, см. описание функции group_replication_set_as_primary().

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

    Пошаговые понижения версий серверов в группах поддерживаются в серии MySQL 8.4 LTS. Например, член группы, работающий на MySQL 8.4.2, может быть понижен до MySQL 8.4.0.

    Аналогично, межверсионное членство в группе также поддерживается в серии релизов 8.4. Например, сервер, работающий на MySQL 8.4.0, может присоединиться к группе, все члены которой в настоящее время работают на MySQL 8.4.2, как и сервер, работающий на MySQL 8.4.3.

  • Значения по умолчанию переменных группы репликации. Значения по умолчанию двух системных переменных сервера, относящихся к группе репликации, были изменены в MySQL 8.4:

    • Значение по умолчанию системной переменной group_replication_consistency было изменено на BEFORE_ON_PRIMARY_FAILOVER в MySQL 8.4.0. (Ранее оно было EVENTUAL.)

    • Значение по умолчанию системной переменной group_replication_exit_state_action было изменено на OFFLINE_MODE в MySQL 8.4.0. (Ранее оно было READ_ONLY.)

    Дополнительная информация представлена в Разделе 20.5.3.2, «Настройка гарантий согласованности транзакций», и Разделе 20.7.7, «Ответы на обнаружение сбоев и сетевые разделения», а также в описаниях перечисленных переменных.

  • Добавлено несколько переменных состояния, специфичных для плагина Group Replication, которые улучшают диагностику и устранение неполадок сетевых нестабильностей, предоставляя статистику об использовании сети, управляющих сообщениях и сообщениях данных для каждого члена группы.

    Дополнительную информацию см. в Разделе 20.9.2, «Переменные состояния группы репликации».

    В рамках этой работы в таблицу Performance Schema replication_group_communication_information был добавлен новый столбец MEMBER_FAILURE_SUSPICIONS_COUNT. Содержимое этого столбца отформатировано как массив JSON, ключами которого являются идентификаторы членов группы, а значениями — количество раз, когда член группы считался подозрительным. Дополнительную информацию см. в описании этой таблицы.

  • Привилегия FLUSH_PRIVILEGES. В MySQL 8.4.0 добавлена новая привилегия, специально для разрешения использования запросов FLUSH PRIVILEGES. В отличие от привилегии RELOAD, привилегия FLUSH_PRIVILEGES применяется только к запросам FLUSH PRIVILEGES.

    В MySQL 8.4 привилегия RELOAD по-прежнему поддерживается в этом качестве для обеспечения обратной совместимости.

    При обновлении выполняется проверка наличия пользователей, обладающих привилегией FLUSH_PRIVILEGES; если таких пользователей нет, то всем пользователям, обладающим привилегией RELOAD, автоматически назначается новая привилегия.

    Если вы понижаете версию с MySQL 8.4 (или более поздней) до версии MySQL, которая не поддерживает привилегию FLUSH_PRIVILEGES, пользователь, которому ранее была предоставлена эта привилегия, не может выполнять запросы FLUSH PRIVILEGES, если у него нет привилегии RELOAD.

  • Привилегия OPTIMIZE_LOCAL_TABLE. MySQL 8.4.0 добавляет новую привилегию OPTIMIZE_LOCAL_TABLE. Пользователи должны иметь эту привилегию для выполнения запросов OPTIMIZE LOCAL TABLE и OPTIMIZE NO_WRITE_TO_BINLOG TABLE.

    При обновлении с предыдущей серии релизов пользователям, имеющим привилегию SYSTEM_USER, автоматически предоставляется привилегия OPTIMIZE_LOCAL_TABLE.

  • Система маскирования и деидентификации данных MySQL Enterprise. Компоненты маскирования данных получили возможность указывать отдельную схему для хранения связанной внутренней таблицы и функций маскирования. Ранее единственным вариантом хранения была схема mysql. Новая переменная только для чтения component_masking.masking_database позволяет задавать и сохранять имя альтернативной схемы при запуске сервера.

  • Сброс словарей маскирования данных. Компонент MySQL Enterprise Data Masking and De-Identification теперь включает возможность сброса данных на вторичном сервере или реплике в оперативную память. Это можно сделать двумя способами:

    • Пользователь может выполнить сброс в любое время, используя функцию masking_dictionaries_flush(), добавленную в этом релизе.

    • Компонент можно настроить на периодический сброс памяти, используя компонент Планировщик, задав новое системное переменную component_masking.dictionaries_flush_interval_seconds соответствующему значению.

    Дополнительную информацию см. в разделе 8.5, «MySQL Enterprise Data Masking and De-Identification», и описаниях этих элементов.

  • Автоматическое обновление гистограмм. MySQL 8.4.0 добавляет поддержку автоматического обновления гистограмм. Когда эта функция включена для данной гистограммы, она обновляется при каждом выполнении ANALYZE TABLE для таблицы, к которой она относится. Кроме того, автоматическое перерасчёт постоянных статистических данных компонентом InnoDB (см. раздел 17.8.10.1, «Настройка параметров постоянной статистики оптимизатора») также обновляет гистограмму. Обновление гистограмм продолжает использовать то же количество ячеек, что и первоначально было указано, если таковые имеются.

    Вы можете включить эту функцию при указании гистограммы, включив опцию AUTO UPDATE для команды ANALYZE TABLE. Чтобы отключить её, используйте MANUAL UPDATE вместо этого. MANUAL UPDATE (без автоматических обновлений) — значение по умолчанию, если ни одна из опций не указана.

    Дополнительную информацию см. в разделе «Анализ статистики гистограмм».

  • Добавленная системная переменная сервера tls-certificates-enforced-validation, которая позволяет DBA принудительно проверять сертификаты при запуске сервера или при использовании команды ALTER INSTANCE RELOAD TLS для перезагрузки сертификатов во время работы. При включённой проверке обнаружение недействительного сертификата останавливает запуск сервера при запуске, предотвращает загрузку недействительных сертификатов во время работы и выводит предупреждения. Дополнительную информацию см. в разделе «Настройка принудительной проверки сертификатов».

  • Добавлены переменные состояния сервера для управления временем ожидания учётных записей MySQL, которые подключаются к серверу MySQL с помощью подключаемого модуля аутентификации LDAP, когда сервер LDAP недоступен или не отвечает. Значение тайм-аута по умолчанию стало 30 секунд для следующих переменных аутентификации LDAP на основе простого и SASL-аутентификации:

    • authentication_ldap_simple_connect_timeout

    • authentication_ldap_simple_response_timeout

    • authentication_ldap_sasl_connect_timeout

    • authentication_ldap_sasl_response_timeout

    Тайм-ауты подключения и ответа можно настроить через системные переменные только на платформах Linux. Дополнительную информацию см. в разделе «Установка тайм-аутов для подключаемого модуля аутентификации LDAP».

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

    Дополнительную информацию см. в разделе 7.4.2, «Журнал ошибок».

  • Добавления в сообщения о запуске и завершении работы сервера. В процессы запуска и завершения работы сервера добавлены следующие типы сообщений, как указано в этом списке:

    • Сообщения о начале и окончании инициализации сервера при запуске сервера с помощью --initialize или --initialize-insecure; эти сообщения дополняют и отличаются от сообщений, отображаемых при обычном запуске и завершении работы сервера.

    • Сообщения о начале и окончании инициализации InnoDB.

    • Сообщения о начале и окончании выполнения файла инициализации во время инициализации сервера.

    • Сообщения о начале и окончании выполнения скомпилированных команд во время инициализации сервера.

    • Сообщения о начале и окончании восстановления после сбоя при запуске сервера (если происходит восстановление после сбоя).

    • Сообщения о начале и окончании инициализации динамических плагинов во время запуска сервера.

    • Сообщения о начале и окончании этапа инициализации компонентов (появляющиеся во время запуска сервера).

    • Сообщения о завершении работы потоков реплики, а также о плавном и жёстком завершении работы потоков подключения во время завершения работы сервера.

    • Сообщения о начале и окончании завершения работы плагинов и компонентов во время завершения работы сервера.

    • Информация об коде завершения (значении возврата) с сообщениями о завершении работы во время инициализации или завершения работы сервера (и в конце)

    Кроме того, если сервер был собран с использованием WITH_SYSTEMD, теперь сервер включает каждое сообщение systemd в журнале ошибок.

  • Добавлена команда SHOW PARSE_TREE, которая отображает JSON-форматированное дерево разбора для команды SELECT. Эта команда предназначена только для использования в целях тестирования и разработки, а не в производственной среде. Она доступна только в отладочных сборках, или если MySQL был собран из исходного кода с помощью опции CMake -DWITH_SHOW_PARSE_TREE, и не включена или не поддерживается в релизных сборках.

  • Информация о подключении к плагину пула потоков. В схеме производительности MySQL добавлена информация о подключениях к пулу потоков следующим образом:

    • Добавлена таблица tp_connections с информацией о каждом подключении к пулу потоков.

    • Добавлены следующие столбцы в таблицу tp_thread_state: TIME_OF_ATTACH, MARKED_STALLED, STATE, EVENT_COUNT, ACCUMULATED_EVENT_TIME, EXEC_COUNT и ACCUMULATED_EXEC_TIME

    • Добавлены следующие столбцы в таблицу tp_thread_group_state: EFFECTIVE_MAX_TRANSACTIONS_LIMIT, NUM_QUERY_THREADS, TIME_OF_LAST_THREAD_CREATION, NUM_CONNECT_HANDLER_THREAD_IN_SLEEP, THREADS_BOUND_TO_TRANSACTION, QUERY_THREADS_COUNT и TIME_OF_EARLIEST_CON_EXPIRE.

    Дополнительную информацию см. в разделе 7.6.3, «MySQL Enterprise Thread Pool» и разделе 29.12.16, «Таблицы схемы производительности Thread Pool».

  • Использование таблицы Information Schema PROCESSLIST. Хотя таблица INFORMATION_SCHEMA.PROCESSLIST устарела в MySQL 8.0.35 и 8.2.0, интерес к отслеживанию её использования сохраняется. В этом релизе добавлены две системные переменные состояния, предоставляющие информацию об обращениях к таблице PROCESSLIST:

    • Deprecated_use_i_s_processlist_count содержит количество ссылок на таблицу PROCESSLIST в запросах с момента последнего запуска сервера.

    • Deprecated_use_i_s_processlist_last_timestamp хранит время последнего обращения к таблице PROCESSLIST. Это значение метки времени (количество микросекунд с момента начала эпохи Unix).

  • Оптимизация хеш-таблицы для операций с множествами. MySQL 8.2 улучшает производительность операторов, использующих операции с множествами EXCEPT и INTERSECT, при помощи новой оптимизации хеш-таблицы, которая автоматически включается для таких операторов и управляется переключателем оптимизатора hash_set_operations; для отключения этой оптимизации и использования старой оптимизации временных таблиц, используемой в предыдущих версиях MySQL, установите этот флаг в значение off.

    Объем памяти, выделяемой для этой оптимизации, можно контролировать, установив значение системной переменной сервера set_operations_buffer_size; увеличение размера буфера может дополнительно улучшить время выполнения некоторых операторов, использующих эти операции.

    Дополнительную информацию см. в разделе 10.9.2 «Переключаемые оптимизации».

  • Опция CMake WITH_LD. WITH_LD: Определяет, использовать ли компоновщик llvm lld или mold, в противном случае используется стандартный компоновщик. WITH_LD также заменяет опцию CMake, удаленную в MySQL 8.3.0.

  • Улучшения брандмауэра MySQL Enterprise. С момента выпуска MySQL 8.0 в брандмауэр MySQL Enterprise было внесено несколько улучшений. Они перечислены ниже:

    • Процедуры хранения, предоставляемые брандмауэром MySQL Enterprise, теперь ведут себя транзакционно. При возникновении ошибки во время выполнения хранимой процедуры брандмауэра, об этом сообщается, и все изменения, внесенные хранимой процедурой до этого момента, отменяются.

    • Хранимые процедуры брандмауэра теперь избегают выполнения ненужных комбинаций операторов DELETE плюс INSERT, а также операторов INSERT IGNORE плюс UPDATE, тем самым потребляя меньше времени и ресурсов, что делает их быстрее и эффективнее.

    • Процедуры хранения и функции пользовательского уровня, устаревшие в MySQL 8.0.26, теперь выдают предупреждение об устаревании. Вызов либо sp_set_firewall_mode(), либо sp_reload_firewall_rules() порождает такое предупреждение. Дополнительную информацию см. в Хранимых процедурах профиля учетной записи брандмауэра, а также в Миграции профилей учетных записей в профили групп.

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

    • Добавлена системная переменная сервера mysql_firewall_database для включения хранения внутренних таблиц, функций и хранимых процедур в пользовательской схеме.

    • Добавлен скрипт uninstall_firewall.sql для упрощения удаления установленного брандмауэра.

    Дополнительную информацию о хранимых процедурах брандмауэра см. в Хранимых процедурах брандмауэра MySQL Enterprise.

  • Подключаемая аутентификация. Добавлена поддержка аутентификации на сервере MySQL с помощью таких устройств, как смарт-карты, ключи безопасности и биометрические считыватели в контексте WebAuthn. Новый метод аутентификации WebAuthn основан на стандартах FIDO и FIDO2. Он использует пару плагинов, authentication_webauthn на стороне сервера и authentication_webauthn_client на стороне клиента. Плагин аутентификации WebAuthn на стороне сервера включен только в дистрибутивах MySQL Enterprise Edition.

  • Миграция хранилища ключей. Поддерживается миграция от компонента хранилища ключей к плагину хранилища ключей. Для выполнения такой миграции используйте серверный параметр --keyring-migration-from-component, введенный в MySQL 8.4.0, установив --keyring-migration-source в имя исходного компонента и --keyring-migration-destination - имя целевого плагина.

    Дополнительную информацию см. в Миграции ключей с использованием сервера миграции.

  • MySQL Enterprise Audit. Добавлен скрипт audit_log_filter_uninstall.sql для упрощения удаления MySQL Enterprise Audit.

  • Новые ключевые слова. Ключевые слова, добавленные в MySQL 8.4 с момента выпуска MySQL 8.0. Зарезервированные ключевые слова помечены (R).

    AUTO, BERNOULLI, GTIDS, LOG, MANUAL (R), PARALLEL (R), PARSE_TREE, QUALIFY (R), S3 и TABLESAMPLE (R).

  • Превентивная уборка мусора для группы репликации с приоритетом. Системная переменная, добавленная в MySQL 8.4.0 group_replication_preemptive_garbage_collection, позволяет выполнять превентивную очистку мусора для группы репликации, работающей в режиме одного первичного сервера, сохраняя только наборы записи для тех транзакций, которые еще не подтверждены. Это может сэкономить время и потребление памяти. Дополнительная системная переменная group_replication_preemptive_garbage_collection_rows_threshold (также представлена в MySQL 8.4.0) устанавливает нижний предел для количества строк сертификации, необходимого для запуска превентивной очистки мусора, если она включена; значение по умолчанию составляет 100000.

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

    Изменить режим репликации группы между однопервичным и многопервичным режимами невозможно, когда group_replication_preemptive_garbage_collection включен.

    См. раздел 20.7.9 «Мониторинг использования памяти репликации группы с помощью инструментария памяти Performance Schema» для получения информации об использовании памяти данным процессом.

  • Очищенное восстановление журнала репликации. В MySQL 8.4.0 и более поздних версиях можно восстановить журнал репликации, удалив все неполные транзакции. Журнал репликации теперь очищается при запуске сервера с параметром --relay-log-recovery=OFF (по умолчанию), что означает, что удаляются следующие элементы:

    • Транзакции, которые остаются не завершенными в конце журнала репликации

    • Файлы журнала репликации, содержащие только неполные транзакции или части транзакций

    • Ссылки в файле индекса журнала репликации на файлы журнала репликации, которые были удалены

    Дополнительную информацию см. в описании системной переменной сервера relay_log_recovery.

  • Файл истории обновления MySQL. В процессе установки в MySQL 8.4.0 и более поздних версиях в каталоге данных сервера создается или обновляется файл в формате JSON с именем mysql_upgrade_history. Этот файл содержит информацию о версии установленного сервера MySQL, времени его установки и о том, относится ли выпуск к серии LTS или Innovation.

    Типичный файл mysql_upgrade_history может выглядеть так (форматирование скорректировано для лучшей читаемости):

    {
      "file_format":"1",
    
      "upgrade_history":
      [
        {
          "date":"2024-03-15 22:02:35",
          "version":"8.4.0",
          "maturity":"LTS",
          "initialize":true
        },
    
        {
          "date":"2024-05-17 17:46:12",
          "version":"8.4.1",
          "maturity":"LTS",
          "initialize":false
        }
      ]
    
    }
    

    Кроме того, процесс установки теперь проверяет наличие файла mysql_upgrade_info (устаревший в MySQL 8.0 и больше не используется). Если он найден, файл удаляется.

  • Опция mysql client --system-command. Опция --system-command для клиента mysql, доступная в MySQL 8.4.3 и более поздних версиях, включает или отключает команду system.

    Эта опция включена по умолчанию. Для отключения ее используйте --system-command=OFF или --skip-system-command, что приводит к отклонению команды system с ошибкой.

Функции, устаревшие в MySQL 8.4

Следующие функции устарели в MySQL 8.4 и могут быть удалены в будущих версиях. В случаях, когда показаны альтернативы, приложения должны быть обновлены для использования этих альтернатив.

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

  • Переменная среды group_replication_allow_local_lower_version_join. Переменная среды group_replication_allow_local_lower_version_join устарела, и её установка вызывает запись предупреждения () в журнал.

    Ожидайте удаления этой переменной в будущих версиях MySQL. Поскольку функциональность, обеспечиваемая установкой group_replication_allow_local_lower_version_join, больше не нужна, её замена не планируется.

  • Метаданные восстановления групповой репликации. Восстановление групповой репликации больше не зависит от записи событий изменения представления в двоичный журнал для обозначения изменений в членстве группы; вместо этого, когда все члены группы имеют версию MySQL 8.3.0 или выше, члены обмениваются сжатыми метаданными восстановления, и такое событие не регистрируется (или ему не назначается GTID) при присоединении нового члена к группе.

    Метаданные восстановления включают идентификатор представления GCS, GTID_SET сертифицированных транзакций и сертификационную информацию, а также список онлайн-членов.

    Поскольку View_change_log_event больше не играет роли в восстановлении, переменная среды group_replication_view_change_uuid больше не нужна и теперь устарела; ожидайте её удаления в будущих выпусках MySQL. Вам следует учитывать, что замена или альтернатива для этой переменной или её функциональности не планируется, и разрабатывайте свои приложения соответственно.

  • Функция WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(). Функция SQL WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() была устаревшей в MySQL 8.0 и больше не поддерживается с MySQL 8.2. Попытка вызвать эту функцию теперь приводит к синтаксической ошибке.

    Вместо WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS() рекомендуется использовать WAIT_FOR_EXECUTED_GTID_SET(), что позволяет дождаться выполнения определённых GTID. Это работает независимо от канала репликации или клиента пользователя, через который указанные транзакции поступают на сервер.

  • Репликация на основе GTID и IGNORE_SERVER_IDS. При использовании глобальных идентификаторов транзакций (GTID) для репликации транзакции, которые уже были применены, автоматически игнорируются. Это означает, что IGNORE_SERVER_IDS несовместим с режимом GTID. Если gtid_mode имеет значение ON, CHANGE REPLICATION SOURCE TO со списком IGNORE_SERVER_IDS отклоняется с ошибкой. Аналогично, если какой-либо существующий канал репликации был создан со списком идентификаторов серверов для игнорирования, SET gtid_mode=ON также отклоняется. Перед запуском репликации на основе GTID, проверьте и очистите все списки игнорируемых идентификаторов сервера на участвующих серверах; это можно сделать, проверив вывод из SHOW REPLICA STATUS. В таких случаях можно очистить список, выполнив CHANGE REPLICATION SOURCE TO со пустым списком идентификаторов серверов, как показано здесь:

    CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();
    

    Дополнительную информацию см. в разделе 19.1.3.7 «Ограничения репликации с GTID».

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

    Это означает, что в таких случаях binlog_format должен быть ROW, и MIXED больше не поддерживается.

  • Переменная среды expire_logs_days. Переменная среды сервера expire_logs_days, устаревшая в MySQL 8.0, была удалена. Попытка получить или установить эту переменную во время выполнения или запустить mysqld с эквивалентным параметром (--expire-logs-days) теперь приводит к ошибке.

    Вместо expire_logs_days используйте binlog_expire_logs_seconds, что позволяет задавать периоды истечения срока действия помимо (только) целых дней.

  • Символы подстановки в разрешениях на базы данных. Использование символов % и _ в качестве символов подстановки в разрешениях на базы данных устарело в MySQL 8.2.0. Ожидайте, что функциональность подстановки будет удалена в будущих выпусках MySQL, а эти символы будут всегда интерпретироваться как литералы, поскольку они уже интерпретируются как таковые, когда значение переменной среды сервера partial_revokes равно ON.

    Кроме того, обработка % сервером как синонима localhost при проверке привилегий теперь также устарела с MySQL 8.2.0 и, следовательно, может быть удалена в будущих версиях MySQL.

  • Параметр --character-set-client-handshake. Параметр сервера, первоначально предназначенный для использования при обновлении с очень старых версий MySQL, теперь устарел, и при его использовании выводится предупреждение. Ожидайте удаления этого параметра в будущих версиях MySQL; приложения, зависящие от этого параметра, должны начать миграцию как можно скорее.

  • Нестандартные внешние ключи. Использование не уникальных или частичных ключей во внешних ключах не является стандартным и устарело в MySQL. Начиная с MySQL 8.4.0, необходимо явно включить такие ключи, установив restrict_fk_on_non_standard_key в OFF или запуская сервер с параметром --skip-restrict-fk-on-non-standard-key.

    restrict_fk_on_non_standard_key имеет значение ON по умолчанию, что означает, что попытка использовать нестандартный ключ как внешний ключ в операторе CREATE TABLE или другом операторе SQL отклоняется с ошибкой. Установка значения ON позволяет запускать такие операторы, но они вызывают ту же ошибку, что и предупреждение.

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

Функции, удалённые в MySQL 8.4

Следующие элементы устарели и были удалены в MySQL 8.4. В случае наличия альтернатив, приложения следует обновить, чтобы использовать их.

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

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

    • binlog_transaction_dependency_tracking: Устарело в MySQL 8.0.35 и MySQL 8.2.0. Замены этой переменной или её функциональности нет, так как она стала внутренней для сервера. В MySQL 8.4 (и более поздних версиях), когда используются многопоточные реплики, исходный mysqld всегда использует наборы записей для генерации информации о зависимости для двоичного журнала; это эквивалентно установке binlog_transaction_dependency_tracking на WRITESET в предыдущих версиях MySQL.

    • group_replication_recovery_complete_at: Устарело в MySQL 8.0.34. В MySQL 8.4 и более поздних версиях политика, применяемая во время процесса распределённого восстановления, всегда заключается в том, чтобы помечать новый член как онлайн только после того, как он получил, подтвердил и применил все транзакции, произошедшие до его присоединения к группе; это эквивалентно установке group_replication_recovery_complete_at на TRANSACTIONS_APPLIED в предыдущих версиях MySQL.

    • avoid_temporal_upgrade и show_old_temporals: Обе эти переменные устарели в MySQL 5.6; ни одна из них не оказывала никакого влияния в последних версиях MySQL. Обе переменные удалены; их замена не планируется.

    • --no-dd-upgrade: Устарело в MySQL 8.0.16, теперь удалено. Используйте --upgrade=NONE вместо этого.

    • --old и --new: Оба устарели в MySQL 8.0.35 и MySQL 8.2.0 и теперь удалены.

    • --language: Устарело в MySQL 5.5 и теперь удалено.

    • Параметры сервера --ssl и --admin-ssl, а также системные переменные сервера have_ssl и have_openssl были устаревшими в MySQL 8.0.26. Все они удалены в этом релизе. Используйте --tls-version и --admin-tls-version вместо этого.

    • Системная переменная default_authentication_plugin, устаревшая в MySQL 8.0.27, удалена начиная с MySQL 8.4.0. Используйте authentication_policy вместо этого.

      В рамках удаления default_authentication_plugin, синтаксис для authentication_policy был изменён. См. описание authentication_policy для получения дополнительной информации.

    • Параметр сервера --skip-host-cache. Этот параметр удалён; запустите сервер с --host-cache-size=0 вместо него. См. Раздел 7.1.12.3, «Поиск DNS и кэш хостов».

    • Параметры сервера --innodb и --skip-innodb. Эти параметры удалены. СУБД InnoDB всегда включена, и отключить её нельзя.

    • Параметры сервера --character-set-client-handshake и --old-style-user-limits. Эти параметры использовались для совместимости с очень старыми версиями MySQL, которые больше не поддерживаются, и поэтому больше не имеют никакой практической пользы.

    • Запрос FLUSH HOSTS. Запрос FLUSH HOSTS, устаревший в MySQL 8.0.23, был удалён. Чтобы очистить кэш хостов, выполните TRUNCATE TABLE performance_schema.host_cache или mysqladmin flush-hosts.

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

    • --slave-rows-search-algorithms: Алгоритм, используемый приложением репликации для поиска строк таблиц при применении обновлений или удалений, теперь всегда HASH_SCAN,INDEX_SCAN и больше не настраивается пользователем.

    • log_bin_use_v1_events: Это позволяло серверам источника, работающим под MySQL 5.7 и новее, реплицировать данные в более ранние версии MySQL, которые больше не поддерживаются.

    • --relay-log-info-file, --relay-log-info-repository, --master-info-file, --master-info-repository: Использование файлов для хранилища метаданных прикладного модуля и хранилища метаданных подключений было заменено безопасными таблицами и больше не поддерживается. См. Раздел 19.2.4.2, «Хранилища метаданных репликации».

    • transaction_write_set_extraction

    • group_replication_ip_whitelist: Используйте group_replication_ip_allowlist вместо этого.

    • group_replication_primary_member: Больше не требуется; проверьте столбец MEMBER_ROLE в таблице схемы производительности replication_group_members вместо этого.

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

    В рамках этой работы параметр DISABLE ON SLAVE для CREATE EVENT и ALTER EVENT теперь устарел и заменён на DISABLE ON REPLICA. Соответствующий термин SLAVESIDE_DISABLED также теперь устарел и больше не используется в описаниях событий, таких как в таблице схемы информации EVENTS; REPLICA_SIDE_DISABLED отображается теперь вместо него.

    • Запросы, которые были удалены, относящиеся к серверам-источникам репликации, перечислены здесь:

      • CHANGE MASTER TO: Используйте CHANGE REPLICATION SOURCE TO.

      • RESET MASTER: Используйте RESET BINARY LOGS AND GTIDS.

      • SHOW MASTER STATUS: Используйте SHOW BINARY LOG STATUS.

      • PURGE MASTER LOGS: Используйте PURGE BINARY LOGS.

      • SHOW MASTER LOGS: Используйте SHOW BINARY LOGS.

    • Удалённые SQL-запросы, относящиеся к репликам, перечислены здесь:

      • START SLAVE: Используйте START REPLICA.

      • STOP SLAVE: Используйте STOP REPLICA.

      • SHOW SLAVE STATUS: Используйте SHOW REPLICA STATUS.

      • SHOW SLAVE HOSTS: Используйте SHOW REPLICAS.

      • RESET SLAVE: Используйте RESET REPLICA.

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

    Кроме того, ряд устаревших параметров, ранее поддерживаемых CHANGE REPLICATION SOURCE TO и START REPLICA, были удалены и больше не принимаются сервером. Удалённые параметры для каждого из этих SQL-запросов перечислены ниже.

    • Здесь перечислены опции, удалённые из CHANGE REPLICATION SOURCE TO:

      • MASTER_AUTO_POSITION: Используйте SOURCE_AUTO_POSITION.

      • MASTER_HOST: Используйте SOURCE_HOST.

      • MASTER_BIND: Используйте SOURCE_BIND.

      • MASTER_UseR: Используйте SOURCE_UseR.

      • MASTER_PASSWORD: Используйте SOURCE_PASSWORD.

      • MASTER_PORT: Используйте SOURCE_PORT.

      • MASTER_CONNECT_RETRY: Используйте SOURCE_CONNECT_RETRY.

      • MASTER_RETRY_COUNT: Используйте SOURCE_RETRY_COUNT.

      • MASTER_DELAY: Используйте SOURCE_DELAY.

      • MASTER_SSL: Используйте SOURCE_SSL.

      • MASTER_SSL_CA: Используйте SOURCE_SSL_CA.

      • MASTER_SSL_CAPATH: Используйте SOURCE_SSL_CAPATH.

      • MASTER_SSL_CIPHER: Используйте SOURCE_SSL_CIPHER.

      • MASTER_SSL_CRL: Используйте SOURCE_SSL_CRL.

      • MASTER_SSL_CRLPATH: Используйте SOURCE_SSL_CRLPATH.

      • MASTER_SSL_KEY: Используйте SOURCE_SSL_KEY.

      • MASTER_SSL_VERIFY_SERVER_CERT: Используйте SOURCE_SSL_VERIFY_SERVER_CERT.

      • MASTER_TLS_VERSION: Используйте SOURCE_TLS_VERSION.

      • MASTER_TLS_CIPHERSUITES: Используйте SOURCE_TLS_CIPHERSUITES.

      • MASTER_SSL_CERT: Используйте SOURCE_SSL_CERT.

      • MASTER_PUBLIC_KEY_PATH: Используйте SOURCE_PUBLIC_KEY_PATH.

      • GET_MASTER_PUBLIC_KEY: Используйте GET_SOURCE_PUBLIC_KEY.

      • MASTER_HEARTBEAT_PERIOD: Используйте SOURCE_HEARTBEAT_PERIOD.

      • MASTER_COMPRESSION_ALGORITHMS: Используйте SOURCE_COMPRESSION_ALGORITHMS.

      • MASTER_ZSTD_COMPRESSION_LEVEL: Используйте SOURCE_ZSTD_COMPRESSION_LEVEL.

      • MASTER_LOG_FILE: Используйте SOURCE_LOG_FILE.

      • MASTER_LOG_POS: Используйте SOURCE_LOG_POS.

    • Здесь перечислены опции, удалённые из инструкции START REPLICA:

      • MASTER_LOG_FILE: Используйте SOURCE_LOG_FILE.

      • MASTER_LOG_POS: Используйте SOURCE_LOG_POS.

    • Системные переменные и NULL. Не предполагается и не поддерживается, чтобы опция запуска сервера MySQL была установлена в NULL (--my-option=NULL) и интерпретировалась сервером как SQL-выражение (NULL). Это не должно быть возможно. MySQL 8.1 (и более поздние версии) специально запрещают установку опций запуска в NULL таким образом и отклоняют попытку с ошибкой. Попытки установить соответствующие системные переменные сервера в NULL с помощью SET или аналогичным образом в клиенте mysql также отклоняются.

      Из системных переменных сервера в следующем списке исключение из этого ограничения:

      • admin_ssl_ca

      • admin_ssl_capath

      • admin_ssl_cert

      • admin_ssl_cipher

      • admin_tls_ciphersuites

      • admin_ssl_key

      • admin_ssl_crl

      • admin_ssl_crlpath

      • basedir

      • character_sets_dir

      • ft_stopword_file

      • group_replication_recovery_tls_ciphersuites

      • init_file

      • lc_messages_dir

      • plugin_dir

      • relay_log

      • replica_load_tmpdir

      • ssl_ca

      • ssl_capath

      • ssl_cert

      • ssl_cipher

      • ssl_crl

      • ssl_crlpath

      • ssl_key

      • socket

      • tls_ciphersuites

      • tmpdir

      См. также Раздел 7.1.8, «Системные переменные сервера».

    • Идентификаторы с начальным знаком доллара. Использование знака доллара ($) в качестве начального символа необработанного идентификатора было устаревшим в MySQL 8.0 и ограничено в MySQL 8.1 и более поздних версиях; использование необработанного идентификатора, начинающегося со знака доллара и содержащего один или несколько знаков доллара (помимо первого), теперь вызывает синтаксическую ошибку.

      Необработанные идентификаторы, начинающиеся с $, не затронуты этим ограничением, если они не содержат дополнительных $ символов.

      См. Раздел 11.2, «Имена объектов схемы».

    Также в рамках этой работы были удалены следующие ранее устаревшие переменные состояния сервера, а также их замены:

    • Com_slave_start: Используйте Com_replica_start.

    • Com_slave_stop: Используйте Com_replica_stop.

    • Com_show_slave_status: Используйте Com_show_replica_status.

    • Com_show_slave_hosts: Используйте Com_show_replicas.

    • Com_show_master_status: Используйте Com_show_binary_log_status.

    • Com_change_master: Используйте Com_change_replication_source.

    Перечисленные выше переменные, помеченные как удаленные, больше не отображаются в результатах выполнения таких операторов, как SHOW STATUS. См. также Переменные Com_xxx.

  • Плагины. В MySQL 8.4.0 было удалено несколько плагинов, которые перечислены здесь вместе с соответствующими системными переменными и другими связанными с ними функциями, которые также были удалены или иным образом затронуты удалением плагина:

    • плагины authentication_fido и authentication_fido_client: Используйте плагин authentication_webauthn вместо него. См. Раздел 8.4.1.11, «WebAuthn Pluggable Authentication».

      Также были удалены системная переменная сервера authentication_fido_rp_id, опция клиента mysql --fido-register-factor и опция CMake -DWITH_FIDO.

    • плагин keyring_file: Используйте компонент component_keyring_file вместо него. См. Раздел 8.4.4.4, «Использование компонента_keyring_file File-Based Keyring Component».

      Также была удалена системная переменная keyring_file_data. Кроме того, были удалены опции CMake -DINSTALL_MYSQLKEYRINGDIR и -DWITH_KEYRING_TEST.

    • плагин keyring_encrypted_file: Используйте компонент component_keyring_encrypted_file вместо него. См. Раздел 8.4.4.5, «Использование компонента_keyring_encrypted_file Encrypted File-Based Keyring Component».

      Также были удалены системные переменные keyring_encrypted_file_data и keyring_encrypted_file_password.

    • плагин keyring_oci: Используйте компонент component_keyring_oci вместо него. См. Раздел 8.4.4.9, «Использование компонента хранилища ключей Oracle Cloud Infrastructure Vault».

      Также были удалены следующие системные переменные сервера: keyring_oci_ca_certificate, keyring_oci_compartment, keyring_oci_encryption_endpoint, keyring_oci_key_file, keyring_oci_key_fingerprint, keyring_oci_management_endpoint, keyring_oci_master_key, keyring_oci_secrets_endpoint, keyring_oci_tenancy, keyring_oci_user, keyring_oci_vaults_endpoint и keyring_oci_virtual_vault.

    • плагин openssl_udf: Используйте компонент MySQL Enterprise Encryption (component_enterprise_encryption) вместо него; см. Раздел 8.6, «MySQL Enterprise Encryption».

  • Поддержка слабых шифров. При настройке зашифрованных соединений в MySQL 8.4.0 и более поздних версиях больше нельзя указывать шифры, не соответствующие следующим требованиям:

    • Соответствие надлежащей версии TLS (TLS v1.2 или TLS v1.3, соответственно)

    • Обеспечение полной конфиденциальности вперёд

    • Использование SHA2 в шифре, сертификате или обоих

    • Использование AES в режиме GCM или других алгоритмах/режимах AEAD

    Это имеет последствия для установки следующих системных переменных:

    • ssl_cipher

    • admin_ssl_cipher

    • tls_ciphersuites

    • admin_tls_ciphersuites

    См. описания этих переменных для разрешённых значений в MySQL 8.4 и дополнительную информацию.

    Примечание

    libmysqlclient по-прежнему поддерживает дополнительные шифры, не соответствующие этим условиям, чтобы сохранить возможность подключения к более старым версиям MySQL.

  • INFORMATION_SCHEMA.TABLESPACES. Таблица INFORMATION_SCHEMA.TABLESPACES, которая фактически не использовалась, была устаревшей в MySQL 8.0.22 и теперь удалена.

    Примечание

    Для таблиц NDB информация о табличном пространстве предоставляется таблицей Схемы информации FILES.

    Для таблиц InnoDB информация о табличном пространстве предоставляется таблицами Схемы информации INNODB_TABLESPACES и INNODB_DATAFILES.

  • DROP TABLESPACE и ALTER TABLESPACE: Клауза ENGINE. Клауза ENGINE для операторов DROP TABLESPACE и ALTER TABLESPACE была устаревшей в MySQL 8.0. В MySQL 8.4 она больше не поддерживается и вызывает ошибку, если вы попытаетесь использовать её с DROP TABLESPACE или ALTER TABLESPACE ... DROP DATAFILE. ENGINE также больше не поддерживается для всех других вариантов ALTER TABLESPACE, за исключением двух перечисленных здесь случаев:

    • ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}

    • ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB

    Для получения дополнительной информации см. документацию по этим операторам.

  • LOW_PRIORITY с LOCK TABLES ... WRITE. Клауза LOW_PRIORITY оператора LOCK TABLES ... WRITE не имела эффекта с MySQL 5.5 и была устаревшей в MySQL 5.6. Она больше не поддерживается в MySQL 8.4; включение её в LOCK TABLES теперь вызывает синтаксическую ошибку.

  • Форматирование EXPLAIN FORMAT=JSON версиями. Теперь можно выбирать между 2 версиями формата JSON вывода, используемого операторами EXPLAIN FORMAT=JSON, используя системную переменную сервера explain_json_format_version, введённую в этом выпуске. Установка этой переменной в 1 заставляет сервер использовать версию 1, которая является линейным форматом, который всегда использовался для вывода от таких операторов в MySQL 8.2 и ранее. Это значение и формат по умолчанию в MySQL 8.4. Установка explain_json_format_version в 2 заставляет использовать формат версии 2; этот формат JSON вывода основан на путях доступа и предназначен для лучшей совместимости с будущими версиями оптимизатора MySQL.

    См. Получение информации о плане выполнения, для получения дополнительной информации и примеров.

  • Захват вывода EXPLAIN FORMAT=JSON. EXPLAIN FORMAT=JSON был расширен опцией INTO, которая предоставляет возможность сохранить вывод EXPLAIN в формате JSON в переменной пользователя, где с ним можно работать с помощью функций MySQL JSON, например, так:

    mysql> EXPLAIN FORMAT=JSON INTO @myex SELECT name FROM a WHERE id = 2;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT JSON_EXTRACT(@myex, "$.query_block.table.key");
    +------------------------------------------------+
    | JSON_EXTRACT(@myex, "$.query_block.table.key") |
    +------------------------------------------------+
    | "PRIMARY"                                      |
    +------------------------------------------------+
    1 row in set (0.01 sec)
    

    Эта опция может использоваться только в том случае, если оператор EXPLAIN также содержит FORMAT=JSON; в противном случае возникает синтаксическая ошибка. Это требование не зависит от значения explain_format.

    INTO может быть использован со всеми объяснимыми операторами, за исключением EXPLAIN FOR CONNECTION. Он не может быть использован с EXPLAIN ANALYZE.

    Для получения дополнительной информации и примеров см. Получение информации о плане выполнения.

  • EXPLAIN для схемы. Добавлен параметр FOR SCHEMA к оператору EXPLAIN. Синтаксис показан здесь, где stmt – это оператор, для которого требуется объяснение:

    EXPLAIN [options] FOR SCHEMA schema_name stmt
    

    Это приводит к тому, что stmt выполняется как будто в указанной схеме.

    FOR DATABASE также поддерживается как синоним.

    Эта опция несовместима с FOR CONNECTION.

    См. Получение информации о плане выполнения для получения дополнительной информации.

END_OF_DOCUMENT_MARKER
  • Комментарии клиентов сохранены. В MySQL 8.0, удаление комментариев из клиента mysql было по умолчанию; по умолчанию было изменено на сохранение таких комментариев.

    Чтобы включить удаление комментариев, как это выполнялось в MySQL 8.0 и ранее, запустите клиент mysql с --skip-comments.

  • AUTO_INCREMENT и столбцы с плавающей точкой. Использование модификатора AUTO_INCREMENT со столбцами FLOAT и DOUBLE в операциях CREATE TABLE и ALTER TABLE было устаревшим в MySQL 8.0; поддержка полностью удалена в MySQL 8.4, где возникает (Неверный спецификатор столбца для столбца).

    Перед обновлением до MySQL 8.4 из предыдущих версий, вы обязаны исправить любые таблицы, содержащие столбец FLOAT или DOUBLE со AUTO_INCREMENT, чтобы таблица больше не использовала ни один из них. В противном случае обновление не удастся.

  • Утилита mysql_ssl_rsa_setup. Утилита mysql_ssl_rsa_setup, устаревшая в MySQL 8.0.34, удалена. Для дистрибутивов MySQL, скомпилированных с использованием OpenSSL, сервер MySQL может автоматически генерировать отсутствующие SSL и RSA файлы при запуске. См. Раздел 8.3.3.1, «Создание сертификатов SSL и ключей RSA с помощью MySQL» для получения дополнительной информации.

  • Права MySQL. Добавлены права SET_ANY_DEFINER для создания объектов definer и ALLOW_NONEXISTENT_DEFINER для защиты от «одиноких» объектов. Вместе эти права сосуществуют с устаревшими правами.

  • Права SET_USER_ID. Права SET_USER_ID, устаревшие в MySQL 8.2.0, удалены. Использование в операциях GRANT теперь вызывает синтаксическую ошибку.

    Вместо SET_USER_ID, вы можете использовать права SET_ANY_DEFINER для создания объектов definer и ALLOW_NONEXISTENT_DEFINER для защиты от «одиноких» объектов.

    Оба права необходимы для создания «одиноких» SQL-объектов с помощью CREATE PROCEDURE, CREATE FUNCTION, CREATE TRIGGER, CREATE EVENT или CREATE VIEW.

  • Параметры сервера --abort-slave-event-count и --disconnect-slave-event-count. Параметры запуска сервера MySQL --abort-slave-event-count и --disconnect-slave-event-count, ранее используемые в тестировании, устарели в MySQL 8.0 и удалены в этом выпуске. Попытка запуска mysqld с любым из этих параметров теперь приводит к ошибке.

  • Утилита mysql_upgrade. Утилита mysql_upgrade, устаревшая в MySQL 8.0.16, удалена.

  • Утилита mysqlpump. Утилита mysqlpump вместе с её вспомогательными утилитами lz4_decompress и zlib_decompress, устаревшая в MySQL 8.0.34, была удалена. Вместо этого используйте mysqldump или ...

  • Устаревшие опции CMake. Следующие опции для компиляции сервера с помощью CMake были устаревшими и удалены:

    • USE_LD_LLD: Используйте WITH_LD=lld вместо этого.

    • WITH_BOOST, DOWNLOAD_BOOST, DOWNLOAD_BOOST_TIMEOUT: Эти опции больше не нужны; MySQL теперь включает и использует интегрированную версию Boost при компиляции из исходного кода.

  • Удаленные ключевые слова. Ключевые слова, удаленные в MySQL 8.4 начиная с MySQL 8.0. Зарезервированные ключевые слова помечены (R).

    GET_MASTER_PUBLIC_KEY, MASTER_AUTO_POSITION, MASTER_BIND (R), MASTER_COMPRESSION_ALGORITHMS, MASTER_CONNECT_RETRY, MASTER_DELAY, MASTER_HEARTBEAT_PERIOD, MASTER_HOST, MASTER_LOG_FILE, MASTER_LOG_POS, MASTER_PASSWORD, MASTER_PORT, MASTER_PUBLIC_KEY_PATH, MASTER_RETRY_COUNT, MASTER_SSL, MASTER_SSL_CA, MASTER_SSL_CAPATH, MASTER_SSL_CERT, MASTER_SSL_CIPHER, MASTER_SSL_CRL, MASTER_SSL_CRLPATH, MASTER_SSL_KEY, MASTER_SSL_VERIFY_SERVER_CERT (R), MASTER_TLS_CIPHERSUITES, MASTER_TLS_VERSION, MASTER_USER и MASTER_ZSTD_COMPRESSION_LEVEL.

  • Префиксы индексов в ключе разбиения. Столбцы с префиксами индексов допускались в ключе разбиения для разбиеной таблицы в MySQL 8.0, и выводили предупреждение без каких-либо других эффектов при создании, изменении или обновлении разбиеной таблицы. Такие столбцы больше не разрешаются в разбиеномых таблицах, и использование таких столбцов в ключе разбиения приводит к отклонению операторов CREATE TABLE или ALTER TABLE в случае их появления с ошибкой.

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/mysql-nutshell.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API