Spec-Zone.ru › MySQL 9.2

3.4 Что обновляет процесс обновления MySQL

Установка новой версии MySQL может потребовать обновления следующих частей существующей установки:

  • Схема системы mysql, которая содержит таблицы, хранящие информацию, необходимую серверу MySQL во время его работы (см. Раздел 7.3, «Схема системы mysql»). Таблицы схемы mysql делятся на две основные категории:

    • Таблицы словаря данных, которые хранят метаданные об объектах базы данных.

    • Системные таблицы (то есть оставшиеся таблицы, не являющиеся таблицами словаря данных), которые используются для других операционных целей.

  • Другие схемы, некоторые из которых встроенные и могут считаться «принадлежащими» серверу, а другие — нет:

    • Схемы performance_schema, INFORMATION_SCHEMA, ndbinfo и sys.

    • Схемы пользователей.

Две различные версии номера связаны с частями установки, которые могут потребовать обновления:

  • Версия словаря данных. Это относится к таблицам словаря данных.

  • Версия сервера, также известная как версия MySQL. Это относится к системным таблицам и объектам в других схемах.

В обоих случаях фактическая версия, применимая к существующей установке MySQL, хранится в словаре данных, а ожидаемая текущая версия компилируется в новую версию MySQL. Когда фактическая версия ниже ожидаемой текущей версии, эти части установки, связанные с этой версией, должны быть обновлены до текущей версии. Если обе версии указывают на необходимость обновления, обновление словаря данных должно произойти первой.

В соответствии с двумя упомянутыми выше различными версиями, обновление происходит в два этапа:

  • Шаг 1: Обновление словаря данных.

    Этот шаг обновляет:

    • Таблицы словаря данных в схеме mysql. Если фактическая версия словаря данных ниже текущей ожидаемой версии, сервер создаёт таблицы словаря данных с обновлёнными определениями, копирует сохранённые метаданные в новые таблицы, атомарно заменяет старые таблицы на новые и повторно инициализирует словарь данных.

    • Схему Performance Schema, INFORMATION_SCHEMA и ndbinfo.

  • Шаг 2: Обновление сервера.

    Этот этап включает в себя все остальные задачи обновления. Если версия сервера существующей установки MySQL ниже, чем версия новой установленной версии MySQL, всё остальное должно быть обновлено:

    • Системные таблицы в схеме mysql (оставшиеся таблицы, не являющиеся таблицами словаря данных).

    • Схему sys.

    • Схемы пользователей.

Обновление словаря данных (шаг 1) является обязанностью сервера, который выполняет эту задачу по мере необходимости при запуске, если не вызван параметр, который предотвращает его выполнение. Этот параметр — --upgrade=NONE.

Если словарь данных устарел, но серверу запрещено его обновлять, сервер не запускается и завершается с ошибкой вместо этого. Например:

[ERROR] [MY-013381] [Server] Server shutting down because upgrade is
required, yet prohibited by the command line option '--upgrade=NONE'.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

Параметр сервера --upgrade управляет тем, как сервер выполняет автоматическое обновление при запуске:

  • Без параметра или с --upgrade=AUTO, сервер обновляет всё, что, по его мнению, устарело (шаги 1 и 2).

  • С --upgrade=NONE, сервер ничего не обновляет (пропускает шаги 1 и 2), но также завершается с ошибкой, если необходимо обновить словарь данных. Запустить сервер с устаревшим словарем данных невозможно; сервер настаивает на его обновлении или завершении работы.

  • С --upgrade=MINIMAL, сервер обновляет словарь данных, схему Performance Schema и INFORMATION_SCHEMA, если необходимо (шаг 1). Обратите внимание, что после обновления с этим параметром репликация групп запуститься не может, так как системные таблицы, от которых зависят внутренние механизмы репликации, не обновляются, а также могут быть заметны пониженные функции и в других областях.

  • С --upgrade=FORCE, сервер обновляет словарь данных, схему Performance Schema и INFORMATION_SCHEMA, если необходимо (шаг 1), и принудительно обновляет всё остальное (шаг 2). Ожидайте, что запуск сервера займёт больше времени с этим параметром, поскольку сервер проверяет все объекты во всех схемах.

FORCE полезно для принудительного выполнения действий шага 2, если сервер считает, что они не нужны. Разница между FORCE и AUTO в том, что с FORCE сервер пересоздаёт системные таблицы, такие как справочные таблицы или таблицы часовых поясов, если они отсутствуют.

Дополнительные замечания о том, что происходит во время обновления на шаге 2:

  • Шаг 2 устанавливает схему sys, если она не установлена, и обновляет её до текущей версии в противном случае. Возникает ошибка, если существует схема sys, но нет представления version, предполагая, что её отсутствие указывает на схему, созданную пользователем:

    A sys schema exists with no sys.version view. If
    you have a user created sys schema, this must be renamed for the
    upgrade to succeed.
    

    Для обновления в этом случае сначала удалите или переименуйте существующую схему sys. Затем выполните процедуру обновления ещё раз. (Возможно, потребуется принудительно выполнить шаг 2.)

    Чтобы предотвратить проверку схемы sys, запустите сервер с параметром --upgrade=NONE или --upgrade=MINIMAL.

  • Шаг 2 обновляет системные таблицы, чтобы убедиться, что они имеют текущую структуру, и это включает в себя справочные таблицы, но не таблицы часовых поясов. Процедура загрузки таблиц часовых поясов зависит от платформы и требует принятия решений со стороны DBA, поэтому её нельзя выполнить автоматически.

  • Когда Шаг 2 обновляет системные таблицы в схеме mysql, порядок столбцов в первичном ключе таблиц mysql.db, mysql.tables_priv, mysql.columns_priv и mysql.procs_priv изменяется для размещения столбцов имени хоста и имени пользователя вместе. Размещение имени хоста и имени пользователя вместе означает, что можно использовать поиск по индексу, что улучшает производительность для команд CREATE USER, DROP USER и RENAME USER, а также для проверок ACL для нескольких пользователей с множеством привилегий. Необходимо удалить и пересоздать индекс, что может занять некоторое время, если система имеет большое количество пользователей и привилегий.

  • Шаг 2 обрабатывает все таблицы во всех схемах пользователей по мере необходимости. Проверка таблиц может занять много времени. Каждая таблица блокируется и поэтому недоступна для других сессий во время обработки. Операции проверки и ремонта могут быть длительными, особенно для больших таблиц. Для проверки таблиц используется параметр FOR UPGRADE оператора CHECK TABLE. Подробности об этом параметре см. в разделе 15.7.3.2, «CHECK TABLE Statement».

    Чтобы предотвратить проверку таблиц, запустите сервер с параметром --upgrade=NONE или --upgrade=MINIMAL.

    Чтобы принудительно выполнить проверку таблиц, запустите сервер с параметром --upgrade=FORCE.

  • Шаг 2 помечает все проверенные и отремонтированные таблицы номером текущей версии MySQL. Это гарантирует, что при следующей проверке обновления с той же версией сервера можно определить, требуется ли проверка или ремонт конкретной таблицы снова.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/upgrading-what-is-upgraded.html

Spec-Zone.ru

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