3.6 Подготовка вашей установки к обновлению
Перед обновлением до последней версии MySQL 8.4 убедитесь в готовности вашего текущего сервера MySQL 8.3 или MySQL 8.4 к обновлению, выполнив предварительные проверки, описанные ниже. В противном случае процесс обновления может завершиться ошибкой.
Рекомендуется использовать утилиту проверки готовности, которая позволяет проверить, готовы ли экземпляры сервера MySQL к обновлению. Вы можете выбрать целевую версию сервера MySQL, к которой планируете обновить, начиная с MySQL Server 8.0.11 и до версии, соответствующей текущей версии MySQL Shell. Утилита проверки обновления выполняет автоматические проверки, относящиеся к указанной целевой версии, и информирует вас о дополнительных проверках, которые необходимо выполнить вручную. Утилита проверки обновления работает для всех исправительных, инновационных и долгосрочных релизов MySQL. Инструкции по установке MySQL Shell можно найти .
Предварительные проверки:
-
Следующие проблемы должны отсутствовать:
Не должно быть таблиц, использующих устаревшие типы данных или функции.
Не должно быть файлов-сирот
.frm.Триггеры не должны иметь отсутствующего или пустого определяющего пользователя или некорректный контекст создания (указанный атрибутами
character_set_client,collation_connection,Database Collation, отображаемыми операторомSHOW TRIGGERSили таблицейINFORMATION_SCHEMATRIGGERS). Все такие триггеры необходимо экспортировать и импортировать для решения проблемы.
Для проверки этих проблем выполните следующую команду:
mysqlcheck -u root -p --all-databases --check-upgrade
Если mysqlcheck сообщит об ошибках, исправьте их.
-
Не должно быть разнесенных таблиц, использующих механизм хранения, который не поддерживает нативное разнесение. Для определения таких таблиц выполните следующий запрос:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%';Любая таблица, указанная запросом, должна быть изменена для использования
InnoDBили преобразована в неразнесенную таблицу. Для изменения механизма хранения таблицы наInnoDBвыполните следующее утверждение:ALTER TABLE
table_nameENGINE = INNODB;Дополнительную информацию об преобразовании таблиц
MyISAMвInnoDBсм. в разделе 17.6.1.5, «Преобразование таблиц из MyISAM в InnoDB».Для преобразования разнесенной таблицы в неразнесенную выполните следующее утверждение:
ALTER TABLE
table_nameREMOVE PARTITIONING; В MySQL 8.4 некоторые ключевые слова могут быть зарезервированы, что не было в предыдущих версиях. См. раздел 11.3, «Ключевые слова и зарезервированные слова». Это может привести к тому, что ранее используемые идентификаторы станут недопустимыми. Для решения проблем с соответствующими операторами используйте цитирование идентификаторов. См. раздел 11.2, «Имена объектов схемы».
-
В базе данных MySQL 8.3
mysqlне должно быть таблиц с таким же именем, как у таблиц, используемых словарем данных MySQL 8.4. Для определения таких таблиц выполните следующий запрос:SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql' AND LOWER(TABLE_NAME) IN ( 'catalogs', 'character_sets', 'check_constraints', 'collations', 'column_statistics', 'column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata', 'st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats', 'tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage' );Любые таблицы, указанные в запросе, необходимо удалить или переименовать (используйте
RENAME TABLE). Это может также потребовать изменений в приложениях, использующих затронутые таблицы. -
Не должно быть таблиц с именами ограничений внешних ключей длиннее 64 символов. Используйте этот запрос для определения таблиц с именами ограничений, которые слишком длинные:
SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN (SELECT LEFT(SUBSTR(ID,INSTR(ID,'/')+1), INSTR(SUBSTR(ID,INSTR(ID,'/')+1),'_ibfk_')-1) FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE LENGTH(SUBSTR(ID,INSTR(ID,'/')+1))>64);Для таблицы с именем ограничения, превышающим 64 символа, удалите ограничение и добавьте его заново с именем ограничения, не превышающим 64 символа (используйте
ALTER TABLE). Не должно быть определены устаревшие режимы SQL, определяемые переменной системы
sql_mode. Попытка использовать устаревший режим SQL предотвращает запуск MySQL 8.4. Приложения, использующие устаревшие режимы SQL, следует пересмотреть, чтобы избежать их использования. Дополнительную информацию о режимах SQL, удаленных в MySQL 8.4, см. в .Обновлять экземпляр сервера MySQL следует только после его корректного завершения. Если экземпляр был аварийно остановлен, перезапустите его и остановите его с помощью параметра
innodb_fast_shutdown=0перед обновлением.Не должно быть представлений с явно определенными именами столбцов, превышающими 64 символа (представления со столбцами до 255 символов допускались в MySQL 5.7). Для предотвращения ошибок при обновлении такие представления необходимо изменить перед обновлением. В настоящее время единственный метод определения представлений со столбцами, превышающими 64 символа, – это проверка определения представления с помощью
SHOW CREATE VIEW. Вы также можете просмотреть определения представлений, выполнив запрос к таблице схемы информацииVIEWS.Не должно быть таблиц или хранимых процедур с отдельными элементами столбцов
ENUMилиSET, которые превышают 255 символов или 1020 байтов в длину. До MySQL 8.4 максимальная общая длина элементов столбцовENUMилиSETсоставляла 64 КБ. В MySQL 8.4 максимальная длина символов отдельного элемента столбцаENUMилиSETсоставляет 255 символов, а максимальная длина в байтах – 1020 байтов (предел 1020 байтов поддерживает многобайтовые наборы символов). Перед обновлением до MySQL 8.4 измените любые элементы столбцовENUMилиSET, которые превышают новые лимиты. Отсутствие этого приводит к ошибке при обновлении.-
Ваша установка MySQL 8.3 не должна использовать функции, которые не поддерживаются MySQL 8.4. Все изменения здесь зависят от конкретной установки, но следующий пример иллюстрирует, на что следует обратить внимание:
Некоторые параметры запуска сервера и системные переменные были удалены в MySQL 8.4. См. Удаленные функции в MySQL 8.4 и раздел 1.5, «Переменные сервера и состояния, параметры, добавленные, устаревшие или удаленные в MySQL 8.4 со времени MySQL 8.0». Если вы используете какой-либо из них, для обновления потребуются изменения конфигурации.
-
Если вы планируете изменить параметр
lower_case_table_namesна 1 во время обновления, убедитесь, что имена схем и таблиц имеют строчные буквы перед обновлением. В противном случае может произойти ошибка из-за несовпадения регистра имен схемы или таблицы. Вы можете использовать следующие запросы для проверки имен схем и таблиц, содержащих заглавные буквы:mysql> select TABLE_NAME, if(sha(TABLE_NAME) !=sha(lower(TABLE_NAME)),'Yes','No') as UpperCase from information_schema.tables;Если параметр
lower_case_table_names=1включен, процесс обновления проверит имена таблиц и схем на соответствие строчным буквам. Если имена таблиц или схем содержат заглавные буквы, процесс обновления завершится с ошибкой.ПримечаниеИзменение параметра
lower_case_table_namesво время обновления не рекомендуется.
Если обновление до MySQL 8.4 завершается ошибкой из-за какой-либо из описанных выше проблем, сервер откатывает все изменения в каталоге данных. В этом случае удалите все файлы журнала повторных записей и перезапустите сервер MySQL 8.3 в существующем каталоге данных, чтобы устранить ошибки. Файлы журнала повторных записей (ib_logfile*) по умолчанию находятся в каталоге данных MySQL. После исправления ошибок выполните медленный останов (установив innodb_fast_shutdown=0) перед повторной попыткой обновления.
© 2025 Oracle
Licensed under the GPLv2 License.