3.6 Подготовка вашей установки к обновлению
Перед обновлением до последней версии MySQL 9.2 убедитесь в готовности к обновлению вашего текущего сервера MySQL 9.1 или MySQL 8.4, выполнив предварительные проверки, описанные ниже. В противном случае процесс обновления может завершиться ошибкой.
Рассмотрите возможность использования , которая позволяет проверить, готовы ли серверные экземпляры MySQL к обновлению. Вы можете выбрать целевую версию сервера MySQL, для которой планируется обновление, от MySQL Server 8.0.11 до версии MySQL Server, соответствующей текущей версии MySQL Shell. Утилита проверки обновления выполняет автоматические проверки, относящиеся к указанной целевой версии, и сообщает вам о дополнительных проверках, которые необходимо выполнить вручную. Утилита проверки обновления работает со всеми выпусками MySQL (Bugfix, Innovation и LTS). Инструкции по установке 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 9.2, если ранее они не были зарезервированы. См. Раздел 11.3, «Ключевые слова и зарезервированные слова». Это может привести к тому, что слова, ранее использовавшиеся в качестве идентификаторов, станут недопустимыми. Для исправления затронутых операторов используйте цитирование идентификаторов. См. Раздел 11.2, «Имена объектов схемы».
-
Не должно быть таблиц в базе данных системы MySQL 9.1
mysql, которые имеют то же имя, что и таблица, используемая словарем данных MySQL 9.2. Для определения таблиц с такими именами выполните этот запрос: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 9.2. Приложения, использующие устаревшие режимы SQL, должны быть пересмотрены, чтобы избежать их использования. Сведения об удаленных в MySQL 9.2 режимах SQL см. .Обновляйте только серверный экземпляр MySQL, который был должным образом остановлен. Если экземпляр неожиданно завершил работу, перезапустите экземпляр и остановите его с помощью
innodb_fast_shutdown=0перед обновлением.Не должно быть представлений с явно определенными именами столбцов, превышающими 64 символа (представления со столбцами до 255 символов разрешались в MySQL 5.7). Чтобы избежать ошибок обновления, такие представления необходимо изменить перед обновлением. В настоящее время единственный способ определения представлений со столбцами, длина имени которых превышает 64 символа, — это проверить определение представления с помощью
SHOW CREATE VIEW. Вы также можете проверить определения представлений, обращаясь к таблице схемы информацииVIEWS.Не должно быть таблиц или хранимых процедур с отдельными
ENUMилиSETэлементами столбцов, длина которых превышает 255 символов или 1020 байт. В MySQL 9.2 максимальная длина символа отдельногоENUMилиSETэлемента столбца составляет 255 символов, а максимальная длина в байтах — 1020 байт. (Предел в 1020 байт поддерживает многобайтовые наборы символов). Перед обновлением до MySQL 8.0 измените любыеENUMилиSETэлементы столбцов, которые превышают новые ограничения. В противном случае обновление завершится ошибкой.-
Ваша установка MySQL 9.1 не должна использовать функции, которые не поддерживаются MySQL 9.2. Любые изменения здесь обязательно зависят от установки, но следующий пример иллюстрирует, что нужно искать:
Некоторые параметры запуска сервера и системные переменные были удалены в MySQL 9.2. См. Удаленные функции в MySQL 9.2 и Раздел 1.5, «Добавленные, устаревшие или удаленные параметры, переменные состояния и параметры сервера в MySQL 9.2». Если вы используете какие-либо из них, для обновления требуются изменения конфигурации.
-
Если вы хотите изменить значение
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 9.2 завершается сбоем из-за каких-либо проблем, описанных выше, сервер отменяет все изменения в каталоге данных. В этом случае удалите все файлы журнала повторных операций и перезапустите сервер MySQL 9.1 в существующем каталоге данных, чтобы устранить ошибки. Файлы журнала повторных операций (ib_logfile*) по умолчанию находятся в каталоге данных MySQL. После исправления ошибок выполните медленную остановку (установив innodb_fast_shutdown=0), прежде чем пытаться выполнить обновление снова.
© 2025 Oracle
Licensed under the GPLv2 License.