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.