Spec-Zone.ru › MySQL 5.7

2.11.3 Примечания по понижению версии

Перед понижением версии с MySQL 5.7 ознакомьтесь с информацией в этом разделе. Некоторые пункты могут потребовать действий перед понижением.

  • Изменения в системных таблицах

  • Изменения InnoDB

  • Изменения в журнале регистрации

  • Изменения в SQL

Изменения в системных таблицах

  • В MySQL 5.7.13 столбцы системных таблиц, хранящие значения строк user@host, были увеличены в длине. Перед понижением до предыдущей версии убедитесь, что значения user@host не превышают прежнее ограничение в 77 символов, и выполните следующие изменения в системных таблицах:

    ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
    ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';
    
  • Максимальная длина имён пользователей MySQL была увеличена с 16 до 32 символов в MySQL 5.7.8. Перед понижением до предыдущей версии убедитесь, что имена пользователей не превышают 16 символов, и выполните следующие изменения в системных таблицах:

    ALTER TABLE mysql.tables_priv MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.columns_priv MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.user MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.db MODIFY User char(16) NOT NULL default '';
    ALTER TABLE mysql.procs_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;
    
  • Столбец Password в системной таблице mysql.user был удалён в MySQL 5.7.6. Все учетные данные хранятся в столбце authentication_string, включая те, которые ранее хранились в столбце Password. Чтобы сделать таблицу mysql.user совместимой с предыдущими версиями, выполните следующие изменения перед понижением:

    ALTER TABLE mysql.user ADD Password char(41) character set latin1
      collate latin1_bin NOT NULL default '' AFTER user;
    UPDATE mysql.user SET password = authentication_string WHERE
      LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
    UPDATE mysql.user SET authentication_string = '' WHERE
      LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';
    
  • Системные таблицы help_* и time_zone* изменили тип данных с MyISAM на InnoDB в MySQL 5.7.5. Перед понижением до предыдущей версии измените каждую затронутую таблицу обратно на MyISAM, выполнив следующие команды:

    ALTER TABLE mysql.help_category ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_keyword ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_relation ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.help_topic ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_leap_second ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_name ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_transition  ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.time_zone_transition_type ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    
  • Системные таблицы mysql.plugin и mysql.servers изменили тип данных с MyISAM на InnoDB в MySQL 5.7.6. Перед понижением до предыдущей версии измените каждую затронутую таблицу обратно на MyISAM, выполнив следующие команды:

    ALTER TABLE mysql.plugin ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    ALTER TABLE mysql.servers ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;
    
  • Определение столбца plugin в системной таблице mysql.user отличается в MySQL 5.7. Перед понижением до сервера MySQL 5.6 для версий 5.6.23 и выше измените определение столбца plugin с помощью этой команды:

    ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin
      DEFAULT 'mysql_native_password';
    

    Перед понижением до сервера MySQL 5.6.22 или более ранней версии измените определение столбца plugin с помощью этой команды:

    ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin DEFAULT '';
    
  • Начиная с MySQL 5.7.7, схема sys устанавливается по умолчанию во время установки каталога данных. Перед понижением до предыдущей версии рекомендуется удалить схему sys:

    DROP DATABASE sys;
    

    Если вы понижаете до версии, которая включает схему sys, mysql_upgrade восстановит схему sys в совместимом формате. Схема sys не включена в MySQL 5.6.

Изменения InnoDB

  • Начиная с MySQL 5.7.5, поле FIL_PAGE_FLUSH_LSN, записанное на первой странице каждого файла системного табличного пространства InnoDB и в файлы табличного пространства отмены InnoDB, записывается только на первый файл системного табличного пространства InnoDB (номер страницы 0:0). В результате, если у вас есть многофайловое табличное пространство, и вы решите понизиться с MySQL 5.7 до MySQL 5.6, при запуске MySQL 5.6 может появиться сообщение об ошибке, утверждающее, что номера последовательности логов x и y в файлах ibdata не совпадают с номером последовательности логов y в файлах ib_logfiles. Если вы увидите это сообщение, перезапустите MySQL 5.6. Сообщение об ошибке должно больше не появляться.

  • Для упрощения обнаружения табличного пространства InnoDB во время восстановления после сбоя, в MySQL 5.7.5 были введены новые типы записей журнала переигрывания. Это изменение формата журнала переигрывания. Перед выполнением понижения на месте с MySQL 5.7.5 или более поздней версии выполните чистую остановку, используя значение innodb_fast_shutdown равное 0 или 1. Медленная остановка с использованием innodb_fast_shutdown=0 рекомендуется в процессе Понижения на месте.

  • Журналы отмены MySQL 5.7.8 и 5.7.9 могли содержать недостаточную информацию о пространственных столбцах (Ошибка #21508582). Перед понижением на месте с MySQL 5.7.10 или более поздней версии на MySQL 5.7.9 или более раннюю, выполните медленную остановку с innodb_fast_shutdown=0 для очистки журналов отмены. Медленная остановка с использованием innodb_fast_shutdown=0 рекомендуется в процессе Понижения на месте.

  • Журналы отмены MySQL 5.7.8 могли содержать недостаточную информацию о виртуальных столбцах и индексах виртуальных столбцов (Ошибка #21869656). Перед понижением на месте с MySQL 5.7.9 или более поздней версии на MySQL 5.7.8 или более раннюю, выполните медленную остановку с innodb_fast_shutdown=0 для очистки журналов отмены. Медленная остановка с использованием innodb_fast_shutdown=0 рекомендуется в процессе Понижения на месте.

  • Начиная с MySQL 5.7.9, заголовок журнала переигрывания первого файла журнала переигрывания (ib_logfile0) содержит идентификатор версии формата и строку текста, идентифицирующую версию MySQL, создавшую файлы журнала переигрывания. Это изменение формата журнала переигрывания. Чтобы предотвратить запуск более старых версий MySQL на файлах журнала переигрывания, созданных в MySQL 5.7.9 или более поздних версиях, контрольная сумма страниц контрольных точек журнала переигрывания была изменена. В результате необходимо выполнить медленную остановку MySQL (используя innodb_fast_shutdown=0) и удалить файлы журнала переигрывания (файлы ib_logfile*) перед выполнением понижения на месте. Медленная остановка с использованием innodb_fast_shutdown=0 и удаление файлов журнала переигрывания рекомендуется в процессе Понижения на месте.

  • Новая версия сжатия, используемая функцией сжатия страниц InnoDB, была добавлена в MySQL 5.7.32. Новая версия сжатия несовместима с более ранними версиями MySQL. Создание таблицы со сжатием страниц в MySQL 5.7.32 или более поздней версии и доступ к таблице после понижения до версии, более ранней, чем MySQL 5.7.32, приводит к ошибке. В качестве обходного решения, необходимо разархивировать такие таблицы перед понижением. Чтобы разархивировать таблицу, выполните ALTER TABLE tbl_name COMPRESSION='None' и OPTIMIZE TABLE. Подробная информация о функции сжатия страниц InnoDB представлена в Разделе 14.9.2, «Сжатие страниц InnoDB».

Изменения в журнале регистрации

  • Поддержка отправки журнала ошибок сервера в syslog в MySQL 5.7.5 и выше отличается от более старых версий. Если вы используете syslog и понижаетесь до версии, более ранней чем 5.7.5, вы должны прекратить использовать соответствующие переменные системы mysqld и использовать соответствующие параметры команды mysqld_safe вместо них. Предположим, что вы используете syslog, установив эти переменные системы в группе [mysqld] файла конфигурации:

    [mysqld]
    log_syslog=ON
    log_syslog_tag=mytag
    

    Для понижения удалите эти настройки и добавьте настройки параметров в группу параметров файла конфигурации [mysqld_safe]:

    [mysqld_safe]
    syslog
    syslog-tag=mytag
    

    Переменные системы, связанные с syslog, у которых нет соответствующих параметров в mysqld_safe, не могут быть использованы после понижения.

Изменения в SQL

  • Триггер может иметь триггеры для различных комбинаций событий триггера (INSERT, UPDATE, DELETE) и времени действия (BEFORE, AFTER), но до MySQL 5.7.2 не может иметь несколько триггеров с одинаковым событием триггера и временем действия. MySQL 5.7.2 снимает это ограничение, и несколько триггеров разрешены. Это изменение имеет последствия для понижения версии.

    Если вы понижаете версию сервера, который поддерживает несколько триггеров, до более старой версии, которая не поддерживает, понижение имеет следующие последствия:

    • Для каждой таблицы, у которой есть триггеры, все определения триггеров остаются в файле .TRG для таблицы. Однако, если есть несколько триггеров с одинаковым событием триггера и временем действия, сервер выполняет только один из них при возникновении события триггера. Сведения о файлах .TRG см. в Хранение триггеров таблицы.

    • Если триггеры для таблицы добавляются или удаляются после понижения, сервер перезаписывает файл .TRG таблицы. Перезаписанный файл содержит только один триггер на каждую комбинацию события триггера и времени действия; остальные теряются.

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

    1. Для каждого триггера создайте хранимую процедуру, которая содержит весь код в триггере. Значения, доступные с помощью NEW и OLD, могут быть переданы в процедуру с помощью параметров. Если триггеру нужно одно результирующее значение из кода, вы можете поместить код в хранимую функцию и заставить функцию вернуть значение. Если триггеру нужно несколько результирующих значений из кода, вы можете поместить код в хранимую процедуру и вернуть значения с помощью параметров OUT.

    2. Удалите все триггеры для таблицы.

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

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

Spec-Zone.ru

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