2.11.3 Примечания по понижению версии
Перед понижением версии с MySQL 5.7 ознакомьтесь с информацией в этом разделе. Некоторые пункты могут потребовать действий перед понижением.
Изменения в системных таблицах
-
В 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_nameCOMPRESSION='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таблицы. Перезаписанный файл содержит только один триггер на каждую комбинацию события триггера и времени действия; остальные теряются.
Чтобы избежать этих проблем, измените свои триггеры перед понижением версии. Для каждой таблицы, у которой есть несколько триггеров на каждую комбинацию события триггера и времени действия, преобразуйте каждый такой набор триггеров в один триггер следующим образом:
Для каждого триггера создайте хранимую процедуру, которая содержит весь код в триггере. Значения, доступные с помощью
NEWиOLD, могут быть переданы в процедуру с помощью параметров. Если триггеру нужно одно результирующее значение из кода, вы можете поместить код в хранимую функцию и заставить функцию вернуть значение. Если триггеру нужно несколько результирующих значений из кода, вы можете поместить код в хранимую процедуру и вернуть значения с помощью параметровOUT.Удалите все триггеры для таблицы.
Создайте один новый триггер для таблицы, который вызывает только что созданные хранимые процедуры. Таким образом, эффект этого триггера будет таким же, как у нескольких триггеров, которые он заменяет.
© 2025 Oracle
Licensed under the GPLv2 License.