Spec-Zone.ru › MySQL 8.4

3.6 Подготовка вашей установки к обновлению

Перед обновлением до последней версии MySQL 8.4 убедитесь в готовности вашего текущего сервера MySQL 8.3 или MySQL 8.4 к обновлению, выполнив предварительные проверки, описанные ниже. В противном случае процесс обновления может завершиться ошибкой.

Подсказка

Рекомендуется использовать утилиту проверки готовности, которая позволяет проверить, готовы ли экземпляры сервера MySQL к обновлению. Вы можете выбрать целевую версию сервера MySQL, к которой планируете обновить, начиная с MySQL Server 8.0.11 и до версии, соответствующей текущей версии MySQL Shell. Утилита проверки обновления выполняет автоматические проверки, относящиеся к указанной целевой версии, и информирует вас о дополнительных проверках, которые необходимо выполнить вручную. Утилита проверки обновления работает для всех исправительных, инновационных и долгосрочных релизов MySQL. Инструкции по установке MySQL Shell можно найти .

Предварительные проверки:

  1. Следующие проблемы должны отсутствовать:

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

    • Не должно быть файлов-сирот .frm.

    • Триггеры не должны иметь отсутствующего или пустого определяющего пользователя или некорректный контекст создания (указанный атрибутами character_set_client, collation_connection, Database Collation, отображаемыми оператором SHOW TRIGGERS или таблицей INFORMATION_SCHEMA TRIGGERS). Все такие триггеры необходимо экспортировать и импортировать для решения проблемы.

    Для проверки этих проблем выполните следующую команду:

    mysqlcheck -u root -p --all-databases --check-upgrade
    

    Если mysqlcheck сообщит об ошибках, исправьте их.

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

    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_name ENGINE = INNODB;
    

    Дополнительную информацию об преобразовании таблиц MyISAM в InnoDB см. в разделе 17.6.1.5, «Преобразование таблиц из MyISAM в InnoDB».

    Для преобразования разнесенной таблицы в неразнесенную выполните следующее утверждение:

    ALTER TABLE table_name REMOVE PARTITIONING;
    
  3. В MySQL 8.4 некоторые ключевые слова могут быть зарезервированы, что не было в предыдущих версиях. См. раздел 11.3, «Ключевые слова и зарезервированные слова». Это может привести к тому, что ранее используемые идентификаторы станут недопустимыми. Для решения проблем с соответствующими операторами используйте цитирование идентификаторов. См. раздел 11.2, «Имена объектов схемы».

  4. В базе данных 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). Это может также потребовать изменений в приложениях, использующих затронутые таблицы.

  5. Не должно быть таблиц с именами ограничений внешних ключей длиннее 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).

  6. Не должно быть определены устаревшие режимы SQL, определяемые переменной системы sql_mode. Попытка использовать устаревший режим SQL предотвращает запуск MySQL 8.4. Приложения, использующие устаревшие режимы SQL, следует пересмотреть, чтобы избежать их использования. Дополнительную информацию о режимах SQL, удаленных в MySQL 8.4, см. в .

  7. Обновлять экземпляр сервера MySQL следует только после его корректного завершения. Если экземпляр был аварийно остановлен, перезапустите его и остановите его с помощью параметра innodb_fast_shutdown=0 перед обновлением.

  8. Не должно быть представлений с явно определенными именами столбцов, превышающими 64 символа (представления со столбцами до 255 символов допускались в MySQL 5.7). Для предотвращения ошибок при обновлении такие представления необходимо изменить перед обновлением. В настоящее время единственный метод определения представлений со столбцами, превышающими 64 символа, – это проверка определения представления с помощью SHOW CREATE VIEW. Вы также можете просмотреть определения представлений, выполнив запрос к таблице схемы информации VIEWS.

  9. Не должно быть таблиц или хранимых процедур с отдельными элементами столбцов ENUM или SET, которые превышают 255 символов или 1020 байтов в длину. До MySQL 8.4 максимальная общая длина элементов столбцов ENUM или SET составляла 64 КБ. В MySQL 8.4 максимальная длина символов отдельного элемента столбца ENUM или SET составляет 255 символов, а максимальная длина в байтах – 1020 байтов (предел 1020 байтов поддерживает многобайтовые наборы символов). Перед обновлением до MySQL 8.4 измените любые элементы столбцов ENUM или SET, которые превышают новые лимиты. Отсутствие этого приводит к ошибке при обновлении.

  10. Ваша установка MySQL 8.3 не должна использовать функции, которые не поддерживаются MySQL 8.4. Все изменения здесь зависят от конкретной установки, но следующий пример иллюстрирует, на что следует обратить внимание:

    Некоторые параметры запуска сервера и системные переменные были удалены в MySQL 8.4. См. Удаленные функции в MySQL 8.4 и раздел 1.5, «Переменные сервера и состояния, параметры, добавленные, устаревшие или удаленные в MySQL 8.4 со времени MySQL 8.0». Если вы используете какой-либо из них, для обновления потребуются изменения конфигурации.

  11. Если вы планируете изменить параметр 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/upgrade-prerequisites.html

Spec-Zone.ru

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