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. Начиная с 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_fileOFFеслиMADV_DONTDUMPподдерживается, в противном случаеONON 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_bufferingnoneall--innodb-dedicated-serverЕсли ON[a], значениеinnodb_flush_methodбольше не меняется, как в MySQL 8.0, но вычислениеinnodb_redo_log_capacityизменено с памяти на процессор. Для получения дополнительной информации см. Раздел 17.8.12, «Включение автоматической конфигурации InnoDB для выделенного сервера MySQL».OFFinnodb_adaptive_hash_indexOFFONinnodb_doublewrite_files2 innodb_buffer_pool_instances* 2innodb_doublewrite_pages128 innodb_write_io_threads, что означало значение по умолчанию 4innodb_flush_methodна LinuxO_DIRECTесли поддерживается, в противном случаеfsyncfsync innodb_io_capacity10000 200 innodb_io_capacity_max2 * innodb_io_capacity2 * innodb_io_capacity, с минимальным значением по умолчанию 2000innodb_log_buffer_size67108864 (64 МБ) 16777216 (16 МБ) innodb_numa_interleaveONOFFinnodb_page_cleanersinnodb_buffer_pool_instances4 innodb_parallel_read_threadsдоступных логических процессоров / 8, с минимальным значением по умолчанию 4 4 innodb_purge_threads1, если доступных логических процессоров <= 16, иначе 4 4 innodb_read_io_threadsдоступных логических процессоров / 2, с минимальным значением по умолчанию 4 4 innodb_use_fdatasyncONOFFtemptable_max_ram3% от общего объема памяти, со значением по умолчанию в диапазоне от 1 до 4 ГБ 1073741824 (1 ГБ) temptable_max_mmap0, что означает OFF1073741824 (1 ГБ) temptable_use_mmap[b]OFFON
-
Плагин 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:NUMBERTAG— строка длиной до 8 символов, что активируется установкой значения системной переменнойgtid_nextнаAUTOMATIC:, добавленной в этом релизе (см. описание переменной для формата тега и другой информации). Эта метка сохраняется для всех транзакций, исходящих из текущей сессии (если не изменена с помощьюTAGSET gtid_next), и применяется во время фиксации для таких транзакций или, при использовании Групповой репликации, во время сертификации. Также можно установитьgtid_nextна, чтобы установить UUID отдельной транзакции в произвольное значение и присвоить ей пользовательскую метку. ПрисвоениеUUID:TAG:NUMBERUUIDиNUMBERостаётся без изменений по сравнению с предыдущими релизами MySQL. В любом случае, пользователь несёт ответственность за обеспечение уникальности метки для данной топологии репликации.Исходный формат
для GTID по-прежнему поддерживается без изменений, как реализовано в предыдущих версиях MySQL; изменения существующих настроек репликации, использующих GTID, не требуются.UUID:NUMBERУстановка
gtid_nextнаAUTOMATIC:илиTAGтребует нового привилегияUUID:TAG:NUMBERTRANSACTION_GTID_TAG, добавленного в этом релизе; это справедливо как для сервера происхождения, так и дляPRIVILEGE_CHECKS_APPLIERдля потока прикладного модуля репликации. Это также означает, что администратор теперь может ограничить использованиеSET @gtid_next=AUTOMATIC:илиTAGжелаемым набором MySQL пользователей или ролей, так что только те пользователи, относящиеся к заданной области данных или операций, могут фиксировать новые транзакции с назначенными метками.UUID:TAG:NUMBERПримечаниеПри обновлении с предыдущей версии 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 REPLICASQL_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()теперь ожидает завершения следующих заявок перед выбором нового первичного сервера:Эти запросы дополняют запросы, добавленные в 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-аутентификации:
Тайм-ауты подключения и ответа можно настроить через системные переменные только на платформах 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 TABLEperformance_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_extractiongroup_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 также отклоняются.Из системных переменных сервера в следующем списке исключение из этого ограничения:
См. также Раздел 7.1.8, «Системные переменные сервера».
-
Идентификаторы с начальным знаком доллара. Использование знака доллара (
$) в качестве начального символа необработанного идентификатора было устаревшим в MySQL 8.0 и ограничено в MySQL 8.1 и более поздних версиях; использование необработанного идентификатора, начинающегося со знака доллара и содержащего один или несколько знаков доллара (помимо первого), теперь вызывает синтаксическую ошибку.Необработанные идентификаторы, начинающиеся с
$, не затронуты этим ограничением, если они не содержат дополнительных$символов.
Также в рамках этой работы были удалены следующие ранее устаревшие переменные состояния сервера, а также их замены:
-
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
Это имеет последствия для установки следующих системных переменных:
См. описания этих переменных для разрешённых значений в 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 SCHEMAschema_namestmtЭто приводит к тому, что
stmtвыполняется как будто в указанной схеме.FOR DATABASEтакже поддерживается как синоним.Эта опция несовместима с
FOR CONNECTION.См. Получение информации о плане выполнения для получения дополнительной информации.
-
Комментарии клиентов сохранены. В 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.