Spec-Zone.ru › MySQL 5.7

1.3 Что нового в MySQL 5.7

В этом разделе подытожено, что было добавлено, устарело и удалено в MySQL 5.7. В сопутствующем разделе перечислены опции и переменные сервера MySQL, которые были добавлены, устарели или удалены в MySQL 5.7; см. Раздел 1.4, «Серверные и статусные переменные и опции, добавленные, устаревшие или удаленные в MySQL 5.7».

  • Функции, добавленные в MySQL 5.7

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

  • Функции, удаленные в MySQL 5.7

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

В MySQL 5.7 были добавлены следующие функции:

  • Улучшения безопасности. Были добавлены следующие улучшения безопасности:

    • В MySQL 8.0 в качестве плагина аутентификации по умолчанию используется caching_sha2_password. Для обеспечения возможности подключения клиентов MySQL 5.7 к серверам 8.0 с учетными записями, использующими caching_sha2_password, библиотека клиента и клиентские программы MySQL 5.7 поддерживают плагин аутентификации клиента caching_sha2_password начиная с MySQL 5.7.23. Это повышает совместимость MySQL 5.7 с серверами MySQL 8.0 и выше. См. Раздел 6.4.1.4, «Плагин аутентификации с кэшированием SHA-2».

    • Теперь сервер требует, чтобы строки учетных записей в таблице системы mysql.user имели ненулевое значение в столбце plugin и отключает учетные записи с пустым значением. Инструкции по обновлению сервера см. в Разделе 2.10.3, «Изменения в MySQL 5.7». Администраторам баз данных рекомендуется также перевести учетные записи, использующие плагин аутентификации mysql_old_password, на использование mysql_native_password, поскольку поддержка mysql_old_password была удалена. Инструкции по обновлению учетных записей см. в Разделе 6.4.1.3, «Миграция от хеширования паролей до версии 4.1 и плагина mysql_old_password».

    • Теперь в MySQL администраторы могут установить политику автоматического истечения срока действия паролей: любой пользователь, который подключается к серверу с учетной записью, срок действия пароля которой истек, должен изменить пароль. Дополнительную информацию см. в Разделе 6.2.11, «Управление паролями».

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

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

      Все серверы, если не настроены явно для SSL, пытаются автоматически включить SSL при запуске, если находят необходимые файлы SSL в каталоге данных. См. Раздел 6.3.1, «Настройка MySQL для использования зашифрованных соединений».

      Кроме того, дистрибутивы MySQL включают утилиту mysql_ssl_rsa_setup, которую можно вызвать вручную для создания файлов ключей и сертификатов SSL и RSA. Дополнительную информацию см. в Разделе 4.4.5, «mysql_ssl_rsa_setup — Создание файлов SSL/RSA».

    • MySQL-развертывания, установленные с помощью mysqld --initialize, по умолчанию являются безопасными. Следующие изменения были реализованы как характеристики развертывания по умолчанию:

      • Процесс установки создает только одну учетную запись root, 'root'@'localhost', автоматически генерирует случайный пароль для этой учетной записи и помечает пароль как просроченный. Администратор MySQL должен подключиться как root с помощью случайного пароля и назначить новый пароль. (Сервер записывает случайный пароль в журнал ошибок.)

      • При установке не создаются учетные записи анонимных пользователей.

      • При установке не создается база данных test.

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

    • MySQL Enterprise Edition теперь предоставляет возможности маскирования и обезличивания данных. Маскирование данных скрывает конфиденциальную информацию, заменяя реальные значения заменителями. Функции маскирования и обезличивания данных MySQL Enterprise позволяют маскировать существующие данные с помощью нескольких методов, таких как обфускация (удаление идентифицирующих характеристик), генерация форматированных случайных данных и замена или подстановка данных. Дополнительную информацию см. в Разделе 6.5, «Маскирование и обезличивание данных MySQL Enterprise».

    • MySQL теперь устанавливает доступ к клиентам по именованной трубе до минимально необходимого для успешной связи в Windows. Новое клиентское программное обеспечение MySQL может открывать соединения по именованной трубе без дополнительной настройки. Если старое клиентское программное обеспечение не может быть обновлено сразу, можно использовать новую системную переменную named_pipe_full_access_group для предоставления необходимых разрешений группе Windows для открытия соединения по именованной трубе. Членство в группе с полным доступом должно быть ограничено и временным.

  • Изменения режима SQL. Строгий режим SQL для транзакционных движков хранения (STRICT_TRANS_TABLES) теперь включен по умолчанию.

    Реализация режима SQL ONLY_FULL_GROUP_BY была усовершенствована, чтобы больше не отклонять детерминированные запросы, которые ранее отклонялись. В результате этот режим теперь включен по умолчанию, чтобы запрещать только недетерминированные запросы, содержащие выражения, не гарантирующие уникальное определение в группе.

    Режимы SQL ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE теперь устарели, но включены по умолчанию. Длительный план состоит в том, чтобы включить их в строгий режим SQL и удалить их как явные режимы в будущей версии MySQL. См. Изменения режима SQL в MySQL 5.7.

    Изменения по умолчанию в режиме SQL приводят к значению системной переменной sql_mode по умолчанию с включенными этими режимами: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER и NO_ENGINE_SUBSTITUTION.

  • Онлайн ALTER TABLE. ALTER TABLE теперь поддерживает предложение RENAME INDEX, которое переименовывает индекс. Изменение вносится на месте без операции копирования таблицы. Оно работает для всех движков хранения. См. Раздел 13.1.8, «Оператор ALTER TABLE».

  • Плагины анализатора полнотекстового поиска ngram и MeCab. MySQL предоставляет встроенный плагин анализатора полнотекстового поиска ngram, поддерживающий китайский, японский и корейский языки (CJK), и устанавливаемый плагин анализатора полнотекстового поиска MeCab для японского языка.

    Дополнительную информацию см. в Разделе 12.9.8, «Плагин анализатора ngram» и Разделе 12.9.9, «Плагин анализатора MeCab».

  • Улучшения InnoDB. Были добавлены следующие улучшения InnoDB:

    • VARCHAR размер столбца можно увеличить с помощью локального ALTER TABLE, как в этом примере:

      ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
      

      Это верно, пока количество байтов длины, необходимых для столбца VARCHAR, остается неизменным. Для столбцов VARCHAR размером от 0 до 255 байтов требуется один байт длины для кодирования значения. Для столбцов VARCHAR размером 256 байт или более требуется два байта длины. В результате локальное ALTER TABLE поддерживает только увеличение размера столбца VARCHAR с 0 до 255 байтов или с 256 байтов до большего размера. Локальное ALTER TABLE не поддерживает увеличение размера столбца VARCHAR с менее чем 256 байтов до размера, равного или большего 256 байтам. В этом случае количество необходимых байтов длины меняется с 1 на 2, что поддерживается только копией таблицы (ALGORITHM=COPY).

      Уменьшение размера столбца VARCHAR с помощью локального ALTER TABLE не поддерживается. Уменьшение размера столбца VARCHAR требует копирования таблицы (ALGORITHM=COPY).

      Дополнительную информацию см. в разделе 14.13.1, «Операции DDL в режиме онлайн».

    • Производительность DDL для InnoDB временных таблиц улучшена благодаря оптимизации операторов CREATE TABLE, DROP TABLE, TRUNCATE TABLE и ALTER TABLE.

    • InnoDB метаданные временных таблиц больше не хранятся в InnoDB системных таблицах. Вместо этого новая таблица INNODB_TEMP_TABLE_INFO предоставляет пользователям моментальный снимок активных временных таблиц. Таблица содержит метаданные и отчеты обо всех созданных пользователем и системой временных таблицах, активных в данном экземпляре InnoDB. Таблица создается при выполнении первого оператора SELECT на ней.

    • InnoDB теперь поддерживает поддерживаемые MySQL типы пространственных данных. До этого релиза InnoDB хранил пространственные данные как двоичные данные BLOB. BLOB остается основным типом данных, но типы пространственных данных теперь сопоставлены с новым внутренним типом данных InnoDB, DATA_GEOMETRY.

    • Теперь существует отдельный табличный пространство для всех нескомпрессированных InnoDB временных таблиц. Новое табличное пространство всегда пересоздается при запуске сервера и по умолчанию расположено в DATADIR. Новая опция конфигурации, innodb_temp_data_file_path, позволяет пользователю определить путь к файлу временных данных.

    • Функциональность innochecksum дополнена несколькими новыми опциями и расширенными возможностями. См. раздел 4.6.1, «innochecksum — Утилита проверки контрольной суммы файлов InnoDB».

    • Новый тип журнала обратной отмены без повторного записывания для обычных и сжатых временных таблиц и связанных объектов теперь находится в временном табличном пространстве. Дополнительную информацию см. в разделе 14.6.7, «Журналы обратной отмены».

    • Операции дампов и загрузки буфера пула InnoDB улучшены. Новая системная переменная innodb_buffer_pool_dump_pct позволяет указать процент наиболее часто используемых страниц в каждом буферном пуле для чтения и дампов. Когда другие операции ввода-вывода выполняются задачами фонового процесса InnoDB, InnoDB пытается ограничить количество операций загрузки буфера пула в секунду с помощью параметра innodb_io_capacity.

    • Добавлена поддержка для InnoDB плагинов парсеров полнотекстового поиска. Сведения о плагинах парсеров полнотекстового поиска см. в Плагины парсеров полнотекстового поиска и Написание плагинов парсеров полнотекстового поиска.

    • InnoDB поддерживает несколько потоков очистителей страниц для сброса грязных страниц из экземпляров буферного пула. Новая системная переменная innodb_page_cleaners используется для указания количества потоков очистителей страниц. Значение по умолчанию 1 сохраняет предыдущую конфигурацию, в которой используется один поток очистителя страниц. Это улучшение основано на работе, проделанной в MySQL 5.6, которая ввела один поток очистителя страниц для переноса работы по сбросу буфера пула из основного потока InnoDB.

    • Поддержка онлайн DDL расширена до следующих операций для обычных и разнесенных InnoDB таблиц:

      • OPTIMIZE TABLE

      • ALTER TABLE ... FORCE

      • ALTER TABLE ... ENGINE=INNODB (при выполнении на InnoDB таблице)

        Поддержка онлайн DDL уменьшает время перестроения таблиц и допускает одновременные DML. См. раздел 14.13, «InnoDB и онлайн DDL».

    • Файловая система Fusion-io Non-Volatile Memory (NVM) в Linux обеспечивает запись, что делает InnoDB излишней. Буфер двойной записи InnoDB автоматически отключен для файлов системного табличного пространства (), расположенных на устройствах Fusion-io, поддерживающих атомные записи.

    • InnoDB поддерживает функцию для разнесенных InnoDB таблиц и отдельных InnoDB разделов таблиц. Это улучшение упрощает процедуры резервного копирования разнесенных таблиц и позволяет копировать разнесенные таблицы и отдельные разделы таблиц между экземплярами MySQL. Дополнительную информацию см. в разделе 14.6.1.3, «Импорт таблиц InnoDB».

    • Параметр innodb_buffer_pool_size является динамическим, позволяющим изменять размер буферного пула без перезапуска сервера. Операция изменения размера, включающая перемещение страниц в новое место в памяти, выполняется частями. Размер блока настраивается с помощью новой опции конфигурации innodb_buffer_pool_chunk_size. Прогресс изменения размера можно отслеживать с помощью новой системной переменной состояния Innodb_buffer_pool_resize_status. Дополнительную информацию см. в разделе о настройке размера буферного пула InnoDB онлайн.

    • Поддержка многопоточного очистителя страниц (innodb_page_cleaners) расширена до фаз завершения и восстановления.

    • InnoDB поддерживает индексацию типов пространственных данных с помощью SPATIAL индексов, включая использование ALTER TABLE ... ALGORITHM=INPLACE для онлайн-операций (ADD SPATIAL INDEX).

    • InnoDB выполняет массовую загрузку при создании или перестроении индексов. Этот метод создания индексов известен как “сортированное создание индекса”. Это усовершенствование, повышающее эффективность создания индексов, также применимо к полнотекстовым индексам. Новая глобальная конфигурационная опция innodb_fill_factor определяет процент пространства на каждой странице, заполняемой данными при сортированном создании индекса, при этом оставшееся пространство резервируется для будущего роста индекса. Дополнительную информацию см. в разделе 14.6.2.3, «Сортированное создание индексов».

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

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

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

    • InnoDB поддерживает нативное разбиение. Ранее InnoDB полагался на обработчик ha_partition, который создаёт объект обработчика для каждой части. При использовании нативного разбиения таблица InnoDB с разбиением использует один объект обработчика, осознающего разбиение. Это улучшение снижает объём памяти, необходимый для таблиц InnoDB с разбиением.

      Начиная с MySQL 5.7.9, mysql_upgrade ищет и пытается обновить таблицы InnoDB с разбиением, которые были созданы с помощью обработчика ha_partition. Также в MySQL 5.7.9 и более поздних версиях вы можете обновить такие таблицы по имени в клиенте mysql с помощью ALTER TABLE ... UPGRADE PARTITIONING.

    • InnoDB поддерживает создание общих пространств имен таблиц с помощью синтаксиса CREATE TABLESPACE.

      CREATE TABLESPACE `tablespace_name`
        ADD DATAFILE 'file_name.ibd'
        [FILE_BLOCK_SIZE = n]

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

      Таблицы добавляются в общее пространство имен таблиц с помощью синтаксиса CREATE TABLE tbl_name ... TABLESPACE [=] tablespace_name или ALTER TABLE tbl_name TABLESPACE [=] tablespace_name.

      Дополнительную информацию см. в разделе Раздел 14.6.3.3, «Общие пространства имен таблиц».

    • DYNAMIC заменяет COMPACT в качестве неявного формата строк по умолчанию для таблиц InnoDB. Новый параметр конфигурации innodb_default_row_format определяет формат строк по умолчанию InnoDB. Дополнительную информацию см. в разделе Определение формата строк таблицы.

    • Начиная с MySQL 5.7.11, InnoDB поддерживает шифрование данных в состоянии покоя для пространств имен таблиц с файлами на таблицу. Шифрование включено путём указания параметра ENCRYPTION при создании или изменении таблицы InnoDB. Эта функция полагается на плагин keyring для управления ключами шифрования. Дополнительную информацию см. в разделе Раздел 6.4.4, «Система ключей MySQL» и Раздел 14.14, «Шифрование данных InnoDB в состоянии покоя».

    • Начиная с MySQL 5.7.24, версия библиотеки zlib, включённая в MySQL, была повышена с версии 1.2.3 до версии 1.2.11. MySQL реализует сжатие с помощью библиотеки zlib.

      Если вы используете сжатые таблицы InnoDB, см. раздел Раздел 2.10.3, «Изменения в MySQL 5.7» для связанных последствий обновления.

  • Поддержка JSON. Начиная с MySQL 5.7.8, MySQL поддерживает собственный тип данных JSON. Значения JSON хранятся не как строки, а в внутреннем двоичном формате, что позволяет быстро получить доступ к элементам документа. JSON-документы, хранящиеся в столбцах типа JSON, автоматически проверяются при вставке или обновлении, а невалидный документ приводит к ошибке. JSON-документы нормализуются при создании и могут быть сравниваются с помощью большинства операторов сравнения, таких как =, <, <=, >, >=, <>, != и <=>; для получения информации о поддерживаемых операторах, а также приоритетах и других правилах, которые MySQL использует при сравнении значений JSON, см. Сравнение и упорядочивание значений JSON.

    MySQL 5.7.8 также вводит ряд функций для работы со значениями JSON. Эти функции включают следующие:

    • Функции, создающие значения JSON: JSON_ARRAY(), JSON_MERGE() и JSON_OBJECT(). См. Раздел 12.17.2, “Функции для создания значений JSON”.

    • Функции поиска значений JSON: JSON_CONTAINS(), JSON_CONTAINS_PATH(), JSON_EXTRACT(), JSON_KEYS() и JSON_SEARCH(). См. Раздел 12.17.3, “Функции поиска значений JSON”.

    • Функции модификации значений JSON: JSON_APPEND(), JSON_ARRAY_APPEND(), JSON_ARRAY_INSERT(), JSON_INSERT(), JSON_QUOTE(), JSON_REMOVE(), JSON_REPLACE(), JSON_SET() и JSON_UNQUOTE(). См. Раздел 12.17.4, “Функции изменения значений JSON”.

    • Функции, предоставляющие информацию о значениях JSON: JSON_DEPTH(), JSON_LENGTH(), JSON_TYPE() и JSON_VALID(). См. Раздел 12.17.5, “Функции, возвращающие атрибуты значений JSON”.

    В MySQL 5.7.9 и более поздних версиях вы можете использовать column->path в качестве сокращения для JSON_EXTRACT(column, path). Это работает как псевдоним для столбца, где может использоваться идентификатор столбца в операторе SQL, включая WHERE, ORDER BY и GROUP BY. Это включает SELECT, UPDATE, DELETE, CREATE TABLE и другие операторы SQL. Левая часть должна быть идентификатором столбца типа JSON (а не алиасом). Правая часть — это выражение пути JSON в кавычках, которое оценивается по отношению к документу JSON, возвращаемому как значение столбца.

    MySQL 5.7.22 добавляет следующие функции JSON:

    • Две агрегатные функции JSON JSON_ARRAYAGG() и JSON_OBJECTAGG(). JSON_ARRAYAGG() принимает столбец или выражение в качестве аргумента и агрегирует результат в один массив типа JSON. Выражение может оцениваться до любого типа данных MySQL; это не обязательно должно быть значением JSON. JSON_OBJECTAGG() принимает два столбца или выражения, которые интерпретируются как ключ и значение; она возвращает результат как один объект типа JSON. Для получения дополнительной информации и примеров см. Раздел 12.19, “Агрегатные функции”.

    • Функция утилиты JSON JSON_PRETTY(), которая выводит существующее значение JSON в удобном для чтения формате; каждый член JSON-объекта или значение массива печатается на отдельной строке, а дочерний объект или массив отступлены на 2 пробела по отношению к родителю.

      Эта функция также работает со строкой, которая может быть проанализирована как значение JSON.

      См. также Раздел 12.17.6, “Функции утилиты JSON”.

    • Функция утилиты JSON JSON_STORAGE_SIZE(), которая возвращает занимаемое пространство в байтах для двоичного представления документа JSON до любого частичного обновления (см. предыдущий пункт).

      Эта функция также принимает допустимое строковое представление документа JSON. Для такого значения JSON_STORAGE_SIZE() возвращает пространство, используемое его двоичным представлением после преобразования в документ JSON. Для переменной, содержащей строковое представление документа JSON, JSON_STORAGE_FREE() возвращает ноль. Любая из функций выдаёт ошибку, если её (непустой) аргумент не может быть проанализирован как допустимый JSON-документ, и NULL, если аргумент NULL.

      Для получения дополнительной информации и примеров см. Раздел 12.17.6, “Функции утилиты JSON”.

    • Функция слияния JSON, предназначенная для соответствия RFC 7396. JSON_MERGE_PATCH(), при использовании на 2 JSON-объектах, объединяет их в один JSON-объект, который имеет в качестве членов объединение следующих множеств:

      • Каждый член первого объекта, для которого нет члена с тем же ключом во втором объекте.

      • Каждый член второго объекта, для которого нет члена с тем же ключом в первом объекте, и значение которого не является JSON-литералом null.

      • Каждый член, имеющий ключ, который существует в обоих объектах, и значение которого во втором объекте не является JSON-литералом null.

      В рамках этой работы функция JSON_MERGE() была переименована в JSON_MERGE_PRESERVE(). JSON_MERGE() продолжает распознаваться как псевдоним для JSON_MERGE_PRESERVE() в MySQL 5.7, но теперь устарела и может быть удалена в будущей версии MySQL.

      Для получения дополнительной информации и примеров см. Раздел 12.17.4, “Функции изменения значений JSON”.

    См. Раздел 12.17.3, “Функции поиска значений JSON” для получения дополнительной информации о -> и JSON_EXTRACT(). Для получения информации о поддержке путей JSON в MySQL 5.7, см. Поиск и изменение значений JSON. См. также Индексирование сгенерированного столбца для предоставления индекса столбца JSON.

  • Переменные системы и состояния. Информация о переменных системы и состояния сейчас доступна в таблицах Performance Schema, вместо использования таблиц INFORMATION_SCHEMA для получения этих переменных. Это также влияет на работу операторов SHOW VARIABLES и SHOW STATUS. Значение переменной системы show_compatibility_56 влияет на вывод, производимый операторами и таблицами переменных системы и состояния, а также на требуемые привилегии. Подробности см. в описании этой переменной в Разделе 5.1.7, «Переменные системы сервера».

    Примечание

    Значение по умолчанию для show_compatibility_56 равно OFF. Приложения, требующие поведения 5.6, должны установить эту переменную в значение ON до тех пор, пока они не будут перенесены на новое поведение переменных системы и переменных состояния. См. Раздел 25.20, «Миграция на таблицы переменных системы и состояния Performance Schema»

  • Схема sys. Дистрибутивы MySQL теперь включают схему sys, которая представляет собой набор объектов, помогающих администраторам баз данных и разработчикам интерпретировать данные, собранные Performance Schema. Объекты схемы sys могут использоваться для типичных задач настройки и диагностики. Дополнительную информацию см. в Главе 26, Схема MySQL sys.

  • Обработка условий. MySQL теперь поддерживает стеки областей диагностики. Когда стек области диагностики перемещается, первая (текущая) область диагностики становится второй (стековой) областью диагностики, и создается новая текущая область диагностики как ее копия. Внутри обработчика условий выполняемые операторы изменяют новую текущую область диагностики, но GET STACKED DIAGNOSTICS может использоваться для проверки стековой области диагностики, чтобы получить информацию о условии, вызвавшем активацию обработчика, независимо от текущих условий внутри самого обработчика. (Ранее существовала только одна область диагностики. Чтобы проверить условия активации обработчика внутри обработчика, необходимо было проверить эту область диагностики до выполнения любых операторов, которые могут ее изменить.) См. Раздел 13.6.7.3, «Оператор GET DIAGNOSTICS» и Раздел 13.6.7.7, «Область диагностики MySQL».

  • Оптимизатор. Были добавлены следующие улучшения оптимизатора:

    • EXPLAIN может использоваться для получения плана выполнения для выполняемого оператора explainable в именованном соединении:

      EXPLAIN [options] FOR CONNECTION connection_id;
      

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

    • Можно предоставить подсказки оптимизатору внутри отдельных операторов SQL, что позволяет более точно управлять планами выполнения операторов, чем можно сделать с помощью переменной системы optimizer_switch. Подсказки также разрешены в операторах, используемых с EXPLAIN, что позволяет увидеть, как подсказки влияют на планы выполнения. Дополнительную информацию см. в Разделе 8.9.3, «Подсказки оптимизатора».

    • Флаг prefer_ordering_index. По умолчанию MySQL пытается использовать упорядоченный индекс для любого оператора запроса ORDER BY или GROUP BY, имеющего LIMIT-оператор, когда оптимизатор определяет, что это приведет к более быстрому выполнению. Поскольку в некоторых случаях выбор другой оптимизации для таких запросов может быть на самом деле лучше, начиная с MySQL 5.7.33, стало возможным отключить эту оптимизацию, установив флаг prefer_ordering_index в значение off.

      Значение по умолчанию для этого флага равно on.

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

  • Триггеры. Раньше таблица могла иметь не более одного триггера для каждой комбинации события триггера (INSERT, UPDATE, DELETE) и времени действия (BEFORE, AFTER). Это ограничение было снято, и разрешено несколько триггеров. Дополнительную информацию см. в Разделе 23.3, «Использование триггеров».

  • Регистрация. Были добавлены следующие улучшения регистрации:

    • Раньше, в Unix и Unix-подобных системах, поддержка MySQL для отправки журнала ошибок сервера в syslog реализовывалась путем захвата mysqld_safe вывода журнала ошибок сервера и передачи его в syslog. Теперь сервер включает родную поддержку syslog, которая была расширена и включает Windows. Дополнительную информацию об отправке вывода журнала ошибок сервера в syslog см. в Разделе 5.4.2, «Журнал ошибок».

    • Клиент mysql теперь имеет опцию --syslog, которая отправляет интерактивные операторы в системную syslog-утилиту. Регистрация подавляется для операторов, соответствующих списку по умолчанию “ignore” ("*IDENTIFIED*:*PASSWORD*"), а также для операторов, соответствующих любым шаблонам, заданным с помощью опции --histignore. См. Раздел 4.5.1.3, «Регистрация клиента mysql».

  • Сгенерированные колонки. MySQL теперь поддерживает указание сгенерированных колонок в операторах CREATE TABLE и ALTER TABLE. Значения сгенерированной колонки вычисляются из выражения, указанного во время создания колонки. Сгенерированные колонки могут быть виртуальными (вычисляются “в момент чтения” строк) или хранимыми (вычисляются при вставке или обновлении строк). Дополнительную информацию см. в Разделе 13.1.18.7, «CREATE TABLE и сгенерированные колонки».

  • Клиент mysql. Раньше Control+C в mysql прерывал текущий оператор, если он был, или выходил из mysql, если нет. Теперь Control+C прерывает текущий оператор, если он есть, или отменяет любую частичную строку ввода в противном случае, но не выходит.

  • Переименование имени базы данных с помощью mysqlbinlog. Переименование баз данных с помощью mysqlbinlog при чтении из двоичных журналов, записанных с использованием формата на основе строк, теперь поддерживается с помощью опции --rewrite-db, добавленной в MySQL 5.7.1.

    Эта опция использует формат --rewrite-db='dboldname->dbnewname'. Можно реализовать несколько правил переписывания, указав опцию несколько раз.

  • HANDLER с разделяемыми таблицами. Оператор HANDLER теперь может использоваться с пользовательскими разделяемыми таблицами. Такие таблицы могут использовать любой из доступных типов разбиения (см. Раздел 22.2, «Типы разбиения»).

  • Поддержка pushdown условия индекса для разделяемых таблиц. Запросы к разделяемым таблицам, использующие хранилище InnoDB или MyISAM, могут использовать оптимизацию pushdown условия индекса, которая была представлена в MySQL 5.6. См. Раздел 8.2.1.5, «Оптимизация pushdown условия индекса» для получения дополнительной информации.

  • Поддержка ALTER TABLE ... EXCHANGE PARTITION без валидации. Начиная с MySQL 5.7.5, синтаксис ALTER TABLE ... EXCHANGE PARTITION включает необязательную {WITH|WITHOUT} VALIDATION клаузу. Когда WITHOUT VALIDATION указано, ALTER TABLE ... EXCHANGE PARTITION не выполняет проверку строк при обмене заполненной таблицей с разбиением, что позволяет администраторам базы данных взять на себя ответственность за обеспечение того, что строки находятся в границах определения разбиения. WITH VALIDATION является по умолчанию и не требует явного указания. Дополнительную информацию см. в Разделе 22.3.3, «Обмен разбиениями и подразбиениями с таблицами».

  • Улучшения потока дампов источников. Поток дампов источника был переработан для уменьшения конфликтов блокировок и повышения производительности потока источника. До MySQL 5.7.2 поток дампов брал блокировку на двоичном журнале при чтении события; в MySQL 5.7.2 и более поздних версиях эта блокировка удерживается только во время чтения позиции в конце последнего успешно записанного события. Это означает, что несколько потоков дампов теперь могут одновременно читать из файла двоичного журнала, и что потоки дампов теперь могут читать, пока клиенты записывают в двоичный журнал.

  • Поддержка наборов символов. MySQL 5.7.4 включает набор символов gb18030, который поддерживает набор символов Китайского национального стандарта GB18030. Дополнительную информацию о поддержке наборов символов MySQL см. в Главе 10, Наборы символов, наборы правил сопоставления, Unicode.

  • Изменение источника репликации без STOP SLAVE. В MySQL 5.7.4 и более поздних версиях строгое требование выполнить STOP SLAVE перед выполнением любой команды CHANGE MASTER TO отменено. Вместо того, чтобы полагаться на остановку реплики, поведение CHANGE MASTER TO теперь зависит от состояния потоков репликации SQL и I/O реплики; остановка или работа этих потоков определяют, какие опции могут или не могут быть использованы с командой CHANGE MASTER TO в данный момент. Правила определения этого состояния перечислены здесь:

    • Если поток SQL остановлен, вы можете выполнить CHANGE MASTER TO, используя любую комбинацию параметров RELAY_LOG_FILE, RELAY_LOG_POS и MASTER_DELAY, даже если поток I/O реплики работает. Никакие другие параметры не могут быть использованы с этой командой, когда поток I/O работает.

    • Если поток I/O остановлен, вы можете выполнить CHANGE MASTER TO, используя любой из параметров для этой команды (в любой разрешенной комбинации) за исключением RELAY_LOG_FILE, RELAY_LOG_POS или MASTER_DELAY, даже когда поток SQL работает. Эти три параметра не могут быть использованы, когда поток I/O работает.

    • Оба потока SQL и I/O должны быть остановлены перед выполнением CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1.

    Вы можете проверить текущее состояние потоков репликации SQL и I/O, используя SHOW SLAVE STATUS.

    Если вы используете репликацию на основе инструкций и временных таблиц, возможно, что инструкция CHANGE MASTER TO, следующая за инструкцией STOP SLAVE, оставит временные таблицы на реплике. В рамках этого набора улучшений, предупреждение теперь выводится всякий раз, когда CHANGE MASTER TO выполняется после STOP SLAVE при использовании репликации на основе инструкций и Slave_open_temp_tables остается больше 0.

    Дополнительную информацию см. в Разделе 13.4.2.1, «CHANGE MASTER TO Statement» и Разделе 16.3.7, «Переключение источников при отказе».

  • Набор тестов. Теперь в наборе тестов MySQL используется InnoDB в качестве движка хранения по умолчанию.

  • Теперь возможна репликация с несколькими источниками. Репликация MySQL с несколькими источниками добавляет возможность репликации с нескольких источников на реплику. Топологии репликации MySQL с несколькими источниками могут использоваться для резервного копирования нескольких серверов на один сервер, для слияния фрагментов таблиц и консолидации данных с нескольких серверов на один сервер. См. Раздел 16.1.5, «Репликация MySQL с несколькими источниками».

    В рамках репликации MySQL с несколькими источниками были добавлены каналы репликации. Каналы репликации позволяют реплике открывать несколько подключений для репликации с источниками, где каждый канал представляет собой подключение к источнику. См. Раздел 16.2.2, «Каналы репликации».

  • Таблицы схемы Performance Schema для групповой репликации. MySQL 5.7 добавляет ряд новых таблиц в схему Performance Schema, чтобы предоставить информацию о группах и каналах репликации. К ним относятся следующие таблицы:

    • replication_applier_configuration

    • replication_applier_status

    • replication_applier_status_by_coordinator

    • replication_applier_status_by_worker

    • replication_connection_configuration

    • replication_connection_status

    • replication_group_members

    • replication_group_member_stats

    Все эти таблицы были добавлены в MySQL 5.7.2, за исключением replication_group_members и replication_group_member_stats, которые были добавлены в MySQL 5.7.6. Дополнительную информацию см. в Разделе 25.12.11, «Таблицы Performance Schema для репликации».

  • SQL для групповой репликации. Следующие инструкции были добавлены в MySQL 5.7.6 для управления групповой репликацией:

    • START GROUP_REPLICATION

    • STOP GROUP_REPLICATION

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

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

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

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

  • Режимы SQL ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE теперь устарели, но включены по умолчанию. В долгосрочной перспективе они планируются включить в строгий режим SQL и удалить в качестве явных режимов в будущей версии MySQL.

    Устаревшие режимы SQL ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE и NO_ZERO_IN_DATE по-прежнему распознаются, чтобы запросы, содержащие их имена, не вызывали ошибку, но ожидается, что они будут удалены в будущей версии MySQL. Чтобы подготовиться к версиям MySQL, в которых эти имена режимов отсутствуют, приложения должны быть изменены таким образом, чтобы не ссылаться на них. См. Изменения режима SQL в MySQL 5.7.

  • Эти режимы SQL теперь устарели; ожидается, что они будут удалены в будущей версии MySQL: DB2, MAXDB, MSSQL, MYSQL323, MYSQL40, ORACLE, POSTGRESQL, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS. Эти устаревания имеют два следствия:

    • Назначение устаревшего режима переменной системы sql_mode приводит к предупреждению.

    • При включенном режиме SQL MAXDB, использование CREATE TABLE или ALTER TABLE для добавления столбца типа TIMESTAMP в таблицу приводит к предупреждению.

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

    • Использование GRANT для создания пользователей. Используйте вместо этого CREATE USER. Следование этому правилу делает режим SQL NO_AUTO_CREATE_USER несущественным для операторов GRANT, поэтому он тоже устарел.

    • Использование GRANT для изменения свойств учетной записи, кроме назначений привилегий. Это включает аутентификацию, SSL и свойства лимитов ресурсов. Вместо этого задайте такие свойства при создании учетной записи с помощью CREATE USER или измените их позже с помощью ALTER USER.

    • IDENTIFIED BY PASSWORD 'auth_string' синтаксис для CREATE USER и GRANT. Вместо этого используйте IDENTIFIED WITH auth_plugin AS 'auth_string' для CREATE USER и ALTER USER, где значение 'auth_string' находится в формате, совместимом с указанным плагином.

    • Функция PASSWORD() устарела и должна быть исключена из всех контекстов. Следовательно, синтаксис SET PASSWORD ... = PASSWORD('auth_string') также устарел. Синтаксис SET PASSWORD ... = 'auth_string' не устарел; тем не менее, ALTER USER теперь является предпочтительным оператором для задания паролей.

    • Переменная системы old_passwords. Плагины аутентификации учетных записей больше не могут быть оставлены не указанными в таблице системы mysql.user, поэтому любой оператор, который устанавливает пароль из строки открытого текста, может однозначно определить метод хэширования для использования над строкой перед сохранением её в таблице mysql.user. Это делает old_passwords избыточным.

  • Кэш запросов устарел. Устаревание включает следующие элементы:

    • Операторы FLUSH QUERY CACHE и RESET QUERY CACHE.

    • Модификаторы SQL_CACHE и SQL_NO_CACHE оператора SELECT.

    • Эти переменные системы: have_query_cache, ndb_cache_check_time, query_cache_limit, query_cache_min_res_unit, query_cache_size, query_cache_type, query_cache_wlock_invalidate.

    • Эти переменные состояния: Qcache_free_blocks, Qcache_free_memory, Qcache_hits, Qcache_inserts, Qcache_lowmem_prunes, Qcache_not_cached, Qcache_queries_in_cache, Qcache_total_blocks.

  • Ранее параметры запуска сервера --transaction-isolation и --transaction-read-only соответствовали переменным системы tx_isolation и tx_read_only. Для лучшего соответствия имен между параметром запуска и именем переменной системы были созданы алиасы transaction_isolation и transaction_read_only для tx_isolation и tx_read_only. Переменные tx_isolation и tx_read_only теперь устарели; ожидается, что они будут удалены в MySQL 8.0. Приложения должны быть изменены для использования transaction_isolation и transaction_read_only вместо них.

  • Параметр --skip-innodb и его синонимы (--innodb=OFF, --disable-innodb и т.д.) устарели. Эти параметры не имеют эффекта начиная с MySQL 5.7, потому что InnoDB отключить нельзя.

  • Клиентские параметры --ssl и --ssl-verify-server-cert устарели. Используйте --ssl-mode=REQUIRED вместо --ssl=1 или --enable-ssl. Используйте --ssl-mode=DISABLED вместо --ssl=0, --skip-ssl или --disable-ssl. Используйте --ssl-mode=VERIFY_IDENTITY вместо параметра --ssl-verify-server-cert. (Серверный параметр --ssl не устарел.)

    Для C API, параметры MYSQL_OPT_SSL_ENFORCE и MYSQL_OPT_SSL_VERIFY_SERVER_CERT соответствуют клиентским параметрам --ssl и --ssl-verify-server-cert и устарели. Используйте MYSQL_OPT_SSL_MODE со значением параметра SSL_MODE_REQUIRED или SSL_MODE_VERIFY_IDENTITY вместо них.

  • Переменная системы log_warnings и серверный параметр --log-warnings устарели. Используйте переменную системы log_error_verbosity вместо них.

  • Серверный параметр --temp-pool устарел.

  • Переменная системы binlog_max_flush_queue_time не выполняет никаких действий в MySQL 5.7 и устарела начиная с MySQL 5.7.9.

  • Переменная системы innodb_support_xa, которая включает поддержку InnoDB двухфазного подтверждения в транзакциях XA, устарела начиная с MySQL 5.7.10. Поддержка InnoDB двухфазного подтверждения в транзакциях XA всегда включена начиная с MySQL 5.7.10.

  • Переменные системы metadata_locks_cache_size и metadata_locks_hash_instances устарели. Они не выполняют никаких действий начиная с MySQL 5.7.4.

  • Переменная системы sync_frm устарела.

  • Глобальные переменные системы character_set_database и collation_database устарели; ожидается их удаление в будущей версии MySQL.

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

  • Глобальный область действия переменной системы sql_log_bin устарел, и теперь эту переменную можно задавать только в рамках сессии. Оператор SET GLOBAL SQL_LOG_BIN теперь вызывает ошибку. Чтение глобального значения sql_log_bin по-прежнему возможно, но вызывает предупреждение. Вам следует немедленно устранить любые зависимости от чтения этого значения в своих приложениях; глобальный область действия sql_log_bin удален в MySQL 8.0.

  • С введением словаря данных в MySQL 8.0, параметр --ignore-db-dir и переменная системы ignore_db_dirs стали избыточными и были удалены в этой версии. Следовательно, они устарели в MySQL 5.7.

  • GROUP BY по умолчанию неявно сортируется (то есть при отсутствии ASC или DESC обозначений), но полагаться на неявную GROUP BY сортировку в MySQL 5.7 устарело. Для достижения определенного порядка сортировки сгруппированных результатов предпочтительнее использовать явные ASC или DESC обозначения для столбцов GROUP BY или указать предложение ORDER BY. GROUP BY сортировка — это расширение MySQL, которое может измениться в будущей версии; например, чтобы позволить оптимизатору упорядочивать группировки любым способом, который он сочтет наиболее эффективным, и чтобы избежать затрат на сортировку.

  • Ключевые слова EXTENDED и PARTITIONS для оператора EXPLAIN устарели. Эти ключевые слова все еще распознаются, но теперь они излишни, потому что их эффект всегда включен.

  • Функции шифрования ENCRYPT(), ENCODE(), DECODE(), DES_ENCRYPT() и DES_DECRYPT() устарели. Для ENCRYPT() рассмотрите использование SHA2() для одностороннего хеширования вместо этого. Для других функций рассмотрите использование AES_ENCRYPT() и AES_DECRYPT() вместо этого. Параметр --des-key-file, переменная системы have_crypt, параметр DES_KEY_FILE для оператора FLUSH и параметр HAVE_CRYPT CMake также устарели.

  • Пространственная функция MBREqual() устарела. Используйте MBREquals() вместо неё.

  • Функции, описанные в Разделе 12.16.4, «Функции, создающие значения геометрии из значений WKB», ранее принимали либо строки WKB, либо аргументы геометрии. Использование аргументов геометрии устарело. См. этот раздел для получения рекомендаций по миграции запросов, чтобы избежать использования аргументов геометрии.

  • Таблица INFORMATION_SCHEMA PROFILING устарела. Используйте вместо неё Performance Schema, см. Главу 25, MySQL Performance Schema.

  • Таблицы INFORMATION_SCHEMA INNODB_LOCKS и INNODB_LOCK_WAITS устарели, будут удалены в MySQL 8.0, предоставляя таблицы Performance Schema в качестве замены.

  • Таблица Performance Schema setup_timers устарела и удалена в MySQL 8.0, как и строка TICK в таблице performance_timers.

  • Вид схемы sys sys.version устарел; ожидается его удаление в будущей версии MySQL. Затронутые приложения должны быть адаптированы для использования альтернативы. Например, используйте функцию VERSION() для получения версии сервера MySQL.

  • Использование \N как синонима для NULL в операторах SQL устарело и удалено в MySQL 8.0; используйте NULL вместо этого.

    Это изменение не влияет на операции импорта и экспорта текстовых файлов, выполненные с помощью оператора LOAD DATA или SELECT ... INTO OUTFILE, для которых NULL по-прежнему представлено как \N. См. Раздел 13.2.6, «Оператор LOAD DATA».

  • Синтаксис PROCEDURE ANALYSE() устарел.

  • Удаление комментариев клиентом mysql и опции для его управления (--skip-comments, --comments) устарели.

  • Поддержка mysqld_safe для syslog вывода устарела. Используйте встроенную поддержку сервера syslog вместо неё. См. Раздел 5.4.2, «Журнал ошибок».

  • Преобразование имён баз данных до MySQL 5.1, содержащих специальные символы, в формат 5.1 с добавлением префикса #mysql50# устарело. Из-за этого опции --fix-db-names и --fix-table-names для mysqlcheck и фраза UPGRADE DATA DIRECTORY NAME для инструкции ALTER DATABASE также устарели.

    Обновления поддерживаются только между версиями релизов (например, 5.0 до 5.1 или 5.1 до 5.5), поэтому вряд ли останется необходимость в преобразовании имён баз данных 5.0 в текущие версии MySQL. В качестве обходного решения обновите установку MySQL 5.0 до MySQL 5.1 перед обновлением до более новой версии.

  • Функциональность mysql_install_db интегрирована в сервер MySQL, mysqld. Для использования этой возможности для инициализации установки MySQL, если вы ранее вручную вызывали mysql_install_db, вызовите mysqld с опцией --initialize или --initialize-insecure, в зависимости от того, хотите ли вы, чтобы сервер сгенерировал случайный пароль для первоначального 'root'@'localhost' аккаунта.

    mysql_install_db теперь устарел, как и специальная опция --bootstrap, которую mysql_install_db передаёт в mysqld.

  • Утилита mysql_plugin устарела. Альтернативы включают загрузку плагинов при запуске сервера с помощью опции --plugin-load или --plugin-load-add, или во время выполнения с помощью инструкции INSTALL PLUGIN.

  • Утилита resolveip устарела. Вместо неё можно использовать nslookup, host или dig.

  • Утилита resolve_stack_dump устарела. Следы стека из официальных сборок MySQL всегда символизированы, поэтому нет необходимости использовать resolve_stack_dump.

  • Функции C API, , , и устарели. То же самое касается соответствующих команд протокола клиент-сервер COM_PROCESS_KILL, COM_FIELD_LIST, COM_PROCESS_INFO и COM_REFRESH. Вместо этого используйте для выполнения инструкции KILL, SHOW COLUMNS, SHOW PROCESSLIST или FLUSH, соответственно.

  • Функция C API mysql_shutdown() устарела. Вместо этого используйте для выполнения инструкции SHUTDOWN.

  • Встроенная библиотека сервера libmysqld устарела начиная с MySQL 5.7.19. Также устарели:

    • Опции mysql_config --libmysqld-libs, --embedded-libs и --embedded

    • Опции CMake WITH_EMBEDDED_SERVER, WITH_EMBEDDED_SHARED_LIBRARY и INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR

    • (Недокументированная) опция mysql --server-arg

    • Опции mysqltest --embedded-server, --server-arg и --server-file

    • Тестовые программы mysqltest_embedded и mysql_client_test_embedded

    Поскольку libmysqld использует API, сравнимый с libmysqlclient, путь миграции от libmysqld прост:

    1. Запустите автономный сервер MySQL (mysqld).

    2. Измените код приложения, чтобы удалить API-вызовы, специфичные для libmysqld.

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

    4. Измените скрипты сборки, чтобы использовать libmysqlclient вместо libmysqld. Например, если вы используете mysql_config, вызовите его с опцией --libs вместо --libmysqld-libs.

  • Утилита replace устарела.

  • Поддержка DTrace устарела.

  • Функция JSON_MERGE() устарела начиная с MySQL 5.7.22. Используйте JSON_MERGE_PRESERVE() вместо неё.

  • Поддержка размещения разделов таблиц в общих InnoDB таблицах устарела начиная с MySQL 5.7.24. Общие таблица включают InnoDB системную таблицу и общие таблицы. Для получения информации об определении разделов в общих таблицах и их перемещении в таблицы с отдельными файлами на таблицу, см. .

  • Поддержка TABLESPACE = innodb_file_per_table и TABLESPACE = innodb_temporary с CREATE TEMPORARY TABLE устарела начиная с MySQL 5.7.24.

  • Опция --ndb perror устарела. Используйте утилиту ndb_perror вместо неё.

  • Переменная системы myisam_repair_threads myisam_repair_threads устарели начиная с MySQL 5.7.38; ожидается, что поддержка обоих будет удалена в будущей версии MySQL.

    Начиная с MySQL 5.7.38, значения, отличные от 1 (по умолчанию) для myisam_repair_threads, вызывают предупреждение.

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

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

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

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

    • Плагин аутентификации mysql_old_password удален. Аккаунты, использующие этот плагин, отключаются при запуске, и сервер записывает сообщение “неизвестный плагин” в журнал ошибок. Инструкции по обновлению аккаунтов, использующих этот плагин, см. в разделе 6.4.1.3, «Миграция от хеширования паролей до версии 4.1 и плагина mysql_old_password».

    • Опция --secure-auth для серверных и клиентских программ является по умолчанию, но теперь она ничем не отличается. Она устарела; ожидается, что она будет удалена в будущих выпусках MySQL.

    • Опция --skip-secure-auth для серверных и клиентских программ больше не поддерживается, и её использование приводит к ошибке.

    • Система переменных сервера secure_auth разрешает только значение 1; значение 0 больше не разрешается.

    • Для системной переменной old_passwords значение 1 (генерировать хеши до версии 4.1) больше не разрешается.

    • Функция OLD_PASSWORD() удалена.

  • В MySQL 5.6.6 тип данных YEAR(2) с двумя цифрами был устарел. Поддержка YEAR(2) теперь удалена. После обновления до MySQL 5.7.5 или выше, все оставшиеся столбцы YEAR(2) с двумя цифрами должны быть преобразованы в столбцы YEAR с четырьмя цифрами, чтобы снова стать пригодными для использования. Стратегии преобразования см. в разделе 11.2.5, «Ограничения YEAR(2) с двумя цифрами и миграция к YEAR с четырьмя цифрами». Например, выполните mysql_upgrade после обновления.

  • Система переменных innodb_mirrored_log_groups. Единственным поддерживаемым значением было 1, поэтому она не имела смысла.

  • Система переменных storage_engine. Используйте default_storage_engine вместо этого.

  • Система переменных thread_concurrency.

  • Система переменных timed_mutexes, которая не имела эффекта.

  • Запрос IGNORE для ALTER TABLE.

  • INSERT DELAYED больше не поддерживается. Сервер распознает, но игнорирует ключевое слово DELAYED, обрабатывает вставку как обычную вставку и генерирует предупреждение ER_WARN_LEGACY_SYNTAX_CONVERTED. (“INSERT DELAYED больше не поддерживается. Оператор был преобразован в INSERT.”) Аналогично, REPLACE DELAYED обрабатывается как обычное замещение. Ожидается, что ключевое слово DELAYED будет удалено в будущих выпусках.

    Кроме того, были удалены несколько функций или опций, связанных с DELAYED:

    • Опция --delayed-insert для mysqldump.

    • Столбцы COUNT_WRITE_DELAYED, SUM_TIMER_WRITE_DELAYED, MIN_TIMER_WRITE_DELAYED, AVG_TIMER_WRITE_DELAYED и MAX_TIMER_WRITE_DELAYED таблицы table_lock_waits_summary_by_table схемы производительности.

    • mysqlbinlog больше не записывает комментарии, упоминающие INSERT DELAYED.

  • Создание символических ссылок на базы данных в Windows с использованием файлов .sym было удалено, так как оно дублирует встроенную поддержку символических ссылок, доступную с помощью mklink. Все символические ссылки файлов .sym теперь игнорируются и должны быть заменены символическими ссылками, созданными с помощью mklink. См. раздел 8.12.3.3, «Использование символических ссылок для баз данных в Windows».

  • Неиспользуемые опции --basedir, --datadir и --tmpdir для mysql_upgrade были удалены.

  • Ранее опции программы можно было указывать полностью или в виде любого недвусмысленного префикса. Например, опция --compress можно было передать в mysqldump как --compr, но не как --comp, потому что последнее является неоднозначным. Префиксы опций больше не поддерживаются; принимаются только полные опции. Это происходит потому, что префиксы могут создавать проблемы при реализации новых опций для программ, и префикс, который в настоящее время недвусмысленен, может стать неоднозначным в будущем. Некоторые последствия этого изменения:

    • Опция --key-buffer теперь должна указываться как --key-buffer-size.

    • Опция --skip-grant теперь должна указываться как --skip-grant-tables.

  • SHOW ENGINE INNODB MUTEX вывод удалён. Сопоставимая информация может быть сгенерирована путём создания представлений на таблицах схемы производительности.

  • Монитор пространства таблиц InnoDB и монитор таблиц InnoDB удалены. Для монитора таблиц эквивалентная информация может быть получена из таблиц InnoDB INFORMATION_SCHEMA.

  • Специально именованные таблицы, используемые для включения и выключения стандартного монитора InnoDB и монитора блокировок InnoDB (innodb_monitor и innodb_lock_monitor) удалены и заменены двумя динамическими системными переменными: innodb_status_output и innodb_status_output_locks. Дополнительную информацию см. в разделе 14.18, «Мониторы InnoDB».

  • Системные переменные innodb_use_sys_malloc и innodb_additional_mem_pool_size, устаревшие в MySQL 5.6.3, были удалены.

  • Утилиты msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, mysql_waitpid, mysql_zap, mysqlaccess и mysqlbug.

  • Утилита mysqlhotcopy. Альтернативы включают mysqldump и MySQL Enterprise Backup.

  • Сценарий binary-configure.sh.

  • Опция INNODB_PAGE_ATOMIC_REF_COUNT CMake удалена.

  • Опция innodb_create_intrinsic удалена.

  • Опция innodb_optimize_point_storage и связанные с ней внутренние типы данных (DATA_POINT и DATA_VAR_POINT) удалены.

  • Опция innodb_log_checksum_algorithm удалена.

  • Системная переменная myisam_repair_threads начиная с MySQL 5.7.39.

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

Spec-Zone.ru

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