4.4.7 mysql_upgrade — Проверка и обновление таблиц MySQL
Каждый раз при обновлении MySQL следует выполнить mysql_upgrade, который ищет несовместимости с обновлённым сервером MySQL:
Он обновляет системные таблицы в схеме
mysql, чтобы вы могли воспользоваться новыми привилегиями или возможностями, которые могли быть добавлены.Он обновляет схему Performance Schema и схему
sys.Он проверяет схемы пользователей.
Если mysql_upgrade обнаруживает возможную несовместимость таблицы, он выполняет проверку таблицы и, если проблемы обнаружены, пытается восстановить таблицу. Если таблицу нельзя восстановить, см. Раздел 2.10.12, «Восстановление или ремонт таблиц или индексов» для стратегий ручного ремонта таблиц.
mysql_upgrade общается напрямую с сервером MySQL, отправляя ему SQL-команды, необходимые для выполнения обновления.
В MySQL 5.7.11 значение по умолчанию для --early-plugin-load является именем файла библиотеки плагина keyring_file, что приводит к загрузке этого плагина по умолчанию. В MySQL 5.7.12 и более поздних версиях значение по умолчанию для --early-plugin-load пустое; для загрузки плагина keyring_file необходимо явно указать опцию со значением, содержащим имя файла библиотеки плагина keyring_file.
Шифрование табличного пространства InnoDB требует, чтобы плагин keyring был загружен до инициализации InnoDB, поэтому это изменение значения по умолчанию для --early-plugin-load создаёт несовместимость при обновлении с 5.7.11 до 5.7.12 или выше. Администраторы, у которых зашифрованы InnoDB табличные пространства, должны предпринять явные действия, чтобы обеспечить постоянную загрузку плагина keyring: Запустите сервер с опцией --early-plugin-load, в которой указан имя файла библиотеки плагина. Для дополнительной информации см. Раздел 6.4.4.1, «Установка плагина Keyring».
Если вы обновляетесь до MySQL 5.7.2 или более поздней версии с версии, более старой, чем 5.7.2, изменение в таблице mysql.user требует специальной последовательности шагов для выполнения обновления с помощью mysql_upgrade. Подробности см. в Разделе 2.10.3, «Изменения в MySQL 5.7».
В Windows необходимо запускать mysql_upgrade с правами администратора. Это можно сделать, запустив командную строку как администратор и выполнив команду. В противном случае обновление может не выполниться должным образом.
Всегда создавайте резервную копию текущей установки MySQL до выполнения обновления. См. Раздел 7.2, «Методы резервного копирования базы данных».
Некоторые несовместимости при обновлении могут потребовать специальной обработки до обновления вашей установки MySQL и запуска mysql_upgrade. См. Раздел 2.10, «Обновление MySQL» для получения инструкций по определению, применяются ли такие несовместимости к вашей установке, и как их обрабатывать.
Используйте mysql_upgrade следующим образом:
Убедитесь, что сервер запущен.
-
Вызовите mysql_upgrade для обновления системных таблиц в схеме
mysqlи проверки и ремонта таблиц в других схемах:mysql_upgrade [
options] Остановите сервер и перезапустите его, чтобы изменения в системных таблицах вступили в силу.
Если у вас несколько экземпляров сервера MySQL, которые нужно обновить, вызовите mysql_upgrade с параметрами подключения, подходящими для подключения к каждому из требуемых серверов. Например, для серверов, работающих на локальном хосте на портах от 3306 до 3308, обновите каждый из них, подключившись к соответствующему порту:
mysql_upgrade --protocol=tcp -P 3306 [other_options]
mysql_upgrade --protocol=tcp -P 3307 [other_options]
mysql_upgrade --protocol=tcp -P 3308 [other_options]
Для подключений к локальному хосту в Unix, опция --protocol=tcp принудительно подключается с использованием TCP/IP вместо файла сокета Unix.
По умолчанию, mysql_upgrade выполняется как пользователь MySQL root. Если пароль root истек при запуске mysql_upgrade, отображается сообщение, сообщающее об истечении срока действия пароля и о том, что mysql_upgrade завершился неудачно. Чтобы исправить это, сбросьте пароль root, чтобы он не истекал, и снова запустите mysql_upgrade. Сначала подключитесь к серверу как root:
$> mysql -u root -p
Enter password: **** <- enter root password here
Сбросьте пароль с помощью ALTER
USER:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
Затем выйдите из mysql и снова запустите mysql_upgrade:
$> mysql_upgrade [options]
Если вы запускаете сервер с системной переменной disabled_storage_engines, установленной для отключения определённых движков хранения (например, MyISAM), mysql_upgrade может завершиться ошибкой, подобной этой:
mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).
Для обработки этого перезапустите сервер с отключённой disabled_storage_engines. Затем вы, вероятно, сможете успешно запустить mysql_upgrade. После этого перезапустите сервер с disabled_storage_engines, установленной в её исходное значение.
Если не вызван с опцией --upgrade-system-tables, mysql_upgrade обрабатывает все таблицы во всех схемах пользователей при необходимости. Проверка таблиц может занять много времени. Каждая таблица блокируется и недоступна для других сеансов во время обработки. Операции проверки и ремонта могут быть длительными, особенно для больших таблиц. Проверка таблиц использует опцию FOR UPGRADE инструкции CHECK TABLE. Подробности об этом см. Раздел 13.7.2.2, «CHECK TABLE Statement».
mysql_upgrade помечает все проверенные и восстановленные таблицы текущим номером версии MySQL. Это гарантирует, что при следующем запуске mysql_upgrade с той же версией сервера можно определить, есть ли необходимость повторной проверки или ремонта заданной таблицы.
mysql_upgrade сохраняет номер версии MySQL в файле с именем mysql_upgrade_info в каталоге данных. Это используется для быстрой проверки того, все ли таблицы проверялись для этого выпуска, чтобы пропустить проверку таблиц. Чтобы проигнорировать этот файл и выполнить проверку независимо, используйте опцию --force.
mysql_upgrade проверяет строки таблицы системы mysql.user и, для любой строки с пустым столбцом plugin, устанавливает этот столбец в значение 'mysql_native_password' или 'mysql_old_password', в зависимости от формата хэша значения столбца Password.
Поддержка хэширования паролей версии до 4.1 и mysql_old_password была удалена, поэтому mysql_upgrade устанавливает пустые значения plugin в значение 'mysql_native_password', если учетные данные используют формат хэша, совместимый с этим плагином. Строки с хэшем пароля версии до 4.1 необходимо обновлять вручную. Инструкции по обновлению учетных записей см. в Разделе 6.4.1.3, «Миграция от хэширования паролей версии до 4.1 и плагина mysql_old_password».
mysql_upgrade не обновляет содержимое таблиц часовых поясов или справочных таблиц. Инструкции по обновлению см. в Разделе 5.1.13, «Поддержка часовых поясов MySQL Server» и Разделе 5.1.14, «Поддержка справочной системы на стороне сервера».
Если не вызван с опцией --skip-sys-schema, mysql_upgrade устанавливает схему 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.
mysql_upgrade проверяет таблицы InnoDB с разбиением, созданные с помощью общего обработчика разбиения, и пытается обновить их до нативного разбиения InnoDB. (Ошибка #76734, Ошибка #20727344) Вы можете обновить такие таблицы по отдельности в клиенте mysql с помощью SQL-запроса ALTER
TABLE ... UPGRADE PARTITIONING.
mysql_upgrade поддерживает следующие опции, которые могут быть указаны в командной строке или в группах [mysql_upgrade] и [client] файла опций. Сведения о файлах опций, используемых программами MySQL, см. в Разделе 4.2.2.2, «Использование файлов опций».
Таблица 4.12 Параметры mysql_upgrade
| Имя параметра | Описание | Введен |
|---|---|---|
| --bind-address | Использование указанного сетевого интерфейса для подключения к MySQL Server | |
| --character-sets-dir | Директория, в которой установлены наборы символов | |
| --compress | Сжатие всей информации, передаваемой между клиентом и сервером | |
| --debug | Запись отладочного журнала | |
| --debug-check | Вывод отладочной информации при завершении программы | |
| --debug-info | Вывод отладочной информации, статистики памяти и ЦП при завершении программы | |
| --default-auth | Плагин аутентификации для использования | |
| --default-character-set | Укажите набор символов по умолчанию | |
| --defaults-extra-file | Чтение указанного файла параметров дополнительно к обычным файлам параметров | |
| --defaults-file | Чтение только указанного файла параметров | |
| --defaults-group-suffix | Значение суффикса группы параметров | |
| --force | Вынужденное выполнение, даже если mysql_upgrade уже был выполнен для текущей версии MySQL | |
| --help | Отображение сообщения справки и выход | |
| --host | Хост, на котором расположен сервер MySQL | |
| --login-path | Чтение параметров пути входа из .mylogin.cnf | |
| --max-allowed-packet | Максимальная длина пакета для отправки или получения от сервера | |
| --net-buffer-length | Размер буфера для связи TCP/IP и сокета | |
| --no-defaults | Не читать файлы параметров | |
| --password | Пароль для подключения к серверу | |
| --pipe | Подключение к серверу с использованием именованной трубы (только Windows) | |
| --plugin-dir | Директория, в которой установлены плагины | |
| --port | Номер TCP/IP порта для подключения | |
| --print-defaults | Вывод параметров по умолчанию | |
| --protocol | Протокол транспорта для использования | |
| --shared-memory-base-name | Имя общей памяти для подключений с общей памятью (только Windows) | |
| --skip-sys-schema | Не устанавливать или обновлять схему sys | |
| --socket | Файл Unix-сокет или именованная труба Windows для использования | |
| --ssl | Включить шифрование соединения | |
| --ssl-ca | Файл, содержащий список доверенных сертификатов SSL-Центров сертификации | |
| --ssl-capath | Директория, содержащая файлы сертификатов доверенных SSL-Центров сертификации | |
| --ssl-cert | Файл, содержащий X.509 сертификат | |
| --ssl-cipher | Разрешенные шифры для шифрования соединения | |
| --ssl-crl | Файл, содержащий списки отзыва сертификатов | |
| --ssl-crlpath | Директория, содержащая файлы списков отзыва сертификатов | |
| --ssl-key | Файл, содержащий X.509 ключ | |
| --ssl-mode | Требуемое состояние безопасности соединения с сервером | 5.7.11 |
| --ssl-verify-server-cert | Проверка имени хоста по имени сервера в сертификате Common Name | |
| --tls-version | Разрешенные TLS-протоколы для зашифрованных подключений | 5.7.10 |
| --upgrade-system-tables | Обновить только системные таблицы, а не схемы пользователей | |
| --user | Имя пользователя MySQL для подключения к серверу | |
| --verbose | Режим подробного вывода | |
| --version-check | Проверка правильности версии сервера | |
| --write-binlog | Запись всех операторов в двоичный журнал |
-
Формат командной строки --helpОтобразить краткое сообщение справки и выйти.
-
Формат командной строки --bind-address=ip_addressНа компьютере с несколькими сетевыми интерфейсами, используйте этот параметр для выбора интерфейса, используемого для подключения к серверу MySQL.
-
Формат командной строки --character-sets-dir=dir_nameТип Имя каталога Каталог, где установлены наборы символов. См. Раздел 10.15, «Настройка наборов символов».
-
--compress,-CФормат командной строки --compress[={OFF|ON}]Тип Булево Значение по умолчанию OFFСжать всю информацию, передаваемую между клиентом и сервером, если это возможно. См. Раздел 4.2.6, «Управление сжатием соединения».
-
--debug[=,debug_options]-# [debug_options]Формат командной строки --debug[=#]Тип Строка Значение по умолчанию d:t:O,/tmp/mysql_upgrade.traceЗаписать отладочный журнал. Типичная строка
debug_options—d:t:o,. По умолчаниюfile_named:t:O,/tmp/mysql_upgrade.trace. -
Формат командной строки --debug-checkТип Булево Вывести некоторые отладочные данные при завершении программы.
-
--debug-info,-TФормат командной строки --debug-infoТип Булево Значение по умолчанию FALSEВывести отладочную информацию и статистику использования памяти и процессора при завершении программы.
-
Формат командной строки --default-auth=pluginТип Строка Подсказка о том, какой плагин проверки подлинности клиента использовать. См. Раздел 6.2.13, «Подключаемые механизмы аутентификации».
-
--default-character-set=charset_nameФормат командной строки --default-character-set=nameТип Строка Используйте
charset_nameв качестве набора символов по умолчанию. См. Раздел 10.15, «Настройка наборов символов». -
--defaults-extra-file=file_nameФормат командной строки --defaults-extra-file=file_nameТип Имя файла Прочитать этот файл параметров после глобального файла параметров, но (на Unix) перед файлом параметров пользователя. Если файл не существует или недоступен, произойдет ошибка. Если
file_nameне является абсолютным именем пути, оно интерпретируется относительно текущей директории.Дополнительную информацию об этом и других параметрах файла параметров см. в Разделе 4.2.2.3, «Параметры командной строки, влияющие на обработку файла параметров».
-
Формат командной строки --defaults-file=file_nameТип Имя файла Используйте только указанный файл параметров. Если файл не существует или недоступен, произойдет ошибка. Если
file_nameне является абсолютным именем пути, оно интерпретируется относительно текущей директории.Дополнительную информацию об этом и других параметрах файла параметров см. в Разделе 4.2.2.3, «Параметры командной строки, влияющие на обработку файла параметров».
-
Формат командной строки --defaults-group-suffix=strТип Строка Читать не только обычные группы параметров, но и группы с обычными именами и суффиксом
str. Например, mysql_upgrade обычно читает группы[client]и[mysql_upgrade]. Если этот параметр задан как--defaults-group-suffix=_other, mysql_upgrade также читает группы[client_other]и[mysql_upgrade_other].Дополнительную информацию об этом и других параметрах файла параметров см. в Разделе 4.2.2.3, «Параметры командной строки, влияющие на обработку файла параметров».
-
Формат командной строки --forceТип Булево Игнорировать файл
mysql_upgrade_infoи принудительно выполнить операцию, даже если mysql_upgrade уже был выполнен для текущей версии MySQL. -
--host=,host_name-hhost_nameФормат командной строки --host=nameТип Строка Подключиться к серверу MySQL на указанном хосте.
-
Формат командной строки --login-path=nameТип Строка Прочитать параметры из указанного пути входа в файле пути входа
.mylogin.cnf. «Путь входа» — это группа параметров, содержащая параметры, которые определяют, к какому серверу MySQL подключиться и под какой учетной записью авторизоваться. Для создания или изменения файла пути входа используйте утилиту mysql_config_editor. См. Раздел 4.6.6, «mysql_config_editor — Утилита конфигурации MySQL».Дополнительную информацию об этом и других параметрах файла параметров см. в Разделе 4.2.2.3, «Параметры командной строки, влияющие на обработку файла параметров».
-
Формат командной строки --max-allowed-packet=valueТип Integer Значение по умолчанию 25165824Минимальное значение 4096Максимальное значение 2147483648Максимальный размер буфера для связи клиент/сервер. Значение по умолчанию — 24 МБ. Минимальное и максимальное значения — 4 КБ и 2 ГБ соответственно.
-
Формат командной строки --net-buffer-length=valueТип Integer Значение по умолчанию 1047552Минимальное значение 4096Максимальное значение 16777216Начальный размер буфера для связи клиент/сервер. Значение по умолчанию — 1 МБ − 1 КБ. Минимальное и максимальное значения — 4 КБ и 16 МБ соответственно.
-
Формат командной строки --no-defaultsНе читать никакие файлы параметров. Если запуск программы завершается неудачно из-за чтения неизвестных параметров из файла параметров,
--no-defaultsможно использовать, чтобы предотвратить их чтение.Исключением является то, что файл
.mylogin.cnfсчитывается во всех случаях, если он существует. Это позволяет указывать пароли более безопасным способом, чем в командной строке, даже при использовании--no-defaults. Чтобы создать.mylogin.cnf, используйте утилиту mysql_config_editor. См. Раздел 4.6.6, «mysql_config_editor — Утилита конфигурации MySQL».Для получения дополнительной информации об этом и других параметрах файла параметров см. Раздел 4.2.2.3, «Параметры командной строки, влияющие на обработку файлов параметров».
-
--password[=,password]-p[password]Формат командной строки --password[=name]Тип String Пароль учетной записи MySQL, используемой для подключения к серверу. Значение пароля является необязательным. Если он не указан, mysql_upgrade запрашивает его. Если указан, не должно быть пробела между
--password=или-pи последующим паролем. Если параметр пароля не указан, по умолчанию пароль не отправляется.Указание пароля в командной строке следует считать небезопасным. Чтобы избежать указания пароля в командной строке, используйте файл параметров. См. Раздел 6.1.2.1, «Рекомендации для конечных пользователей по безопасности паролей».
Чтобы явно указать, что пароля нет и что mysql_upgrade не должен запрашивать его, используйте параметр
--skip-password. -
--pipe,-WФормат командной строки --pipeТип String В Windows подключается к серверу с использованием именованного канала. Этот параметр применим только в том случае, если сервер был запущен с включенной системной переменной
named_pipeдля поддержки соединений с использованием именованных каналов. Кроме того, пользователь, устанавливающий соединение, должен быть членом группы Windows, указанной в системной переменнойnamed_pipe_full_access_group. -
Формат командной строки --plugin-dir=dir_nameТип Directory name Каталог, в котором следует искать подключаемые модули. Укажите этот параметр, если используется параметр
--default-authдля указания подключаемого модуля аутентификации, но mysql_upgrade не находит его. См. Раздел 6.2.13, «Подключаемая аутентификация». -
--port=,port_num-Pport_numФормат командной строки --port=#Тип Numeric Для соединений TCP/IP номер порта, который нужно использовать.
-
Формат командной строки --print-defaultsВывести имя программы и все параметры, которые она получает из файлов параметров.
-
--protocol={TCP|SOCKET|PIPE|MEMORY}Формат командной строки --protocol=nameТип String Транспортный протокол, используемый для подключения к серверу. Он полезен, когда другие параметры подключения обычно приводят к использованию протокола, отличного от того, который вам нужен. Подробные сведения о допустимых значениях см. в Разделе 4.2.5, «Транспортные протоколы соединения».
-
--shared-memory-base-name=nameФормат командной строки --shared-memory-base-name=nameСпецифично для платформы Windows В Windows имя разделяемой памяти, используемое для соединений, устанавливаемых с использованием разделяемой памяти с локальным сервером. Значение по умолчанию —
MYSQL. Имя разделяемой памяти учитывает регистр.Этот параметр применим только в том случае, если сервер был запущен с включенной системной переменной
shared_memoryдля поддержки соединений с использованием разделяемой памяти. -
Формат командной строки --skip-sys-schemaТип Boolean Значение по умолчанию FALSEПо умолчанию mysql_upgrade устанавливает схему
sys, если она не установлена, и обновляет ее до текущей версии в противном случае. Параметр--skip-sys-schemaподавляет это поведение. -
--socket=,path-SpathФормат командной строки --socket={file_name|pipe_name}Тип String Для соединений с
localhost, файл сокета Unix, который нужно использовать, или, в Windows, имя именованного канала, который нужно использовать.В Windows этот параметр применим только в том случае, если сервер был запущен с включенной системной переменной
named_pipeдля поддержки соединений с использованием именованных каналов. Кроме того, пользователь, устанавливающий соединение, должен быть членом группы Windows, указанной в системной переменнойnamed_pipe_full_access_group.
-
--ssl*Параметры, начинающиеся с
--ssl, определяют, использовать ли шифрование при подключении к серверу, и указывают, где найти ключи и сертификаты SSL. См. Параметры командной строки для шифрованных подключений. -
Формат командной строки --tls-version=protocol_listВведён в 5.7.10 Тип Строка Значение по умолчанию (≥ 5.7.28) TLSv1,TLSv1.1,TLSv1.2Значение по умолчанию (≤ 5.7.27) TLSv1,TLSv1.1,TLSv1.2(OpenSSL)TLSv1,TLSv1.1(yaSSL)Допустимые протоколы TLS для шифрованных подключений. Значение представляет собой список одного или нескольких имён протоколов, разделённых запятыми. Протоколы, которые можно указать для этого параметра, зависят от используемой SSL-библиотеки при компиляции MySQL. Подробнее см. Раздел 6.3.2, «Протоколы и шифры TLS шифрованных подключений».
Этот параметр был добавлен в MySQL 5.7.10.
-
Формат командной строки --upgrade-system-tablesТип Булево Обновить только системные таблицы в схеме
mysql, не обновлять схемы пользователей. -
--user=,user_name-uuser_nameФормат командной строки --user=nameТип Строка Имя пользователя учётной записи MySQL, используемой для подключения к серверу. Имя пользователя по умолчанию —
root. -
Формат командной строки --verboseТип Булево Режим подробных сообщений. Выводить больше информации о действиях программы.
-
--version-check,-kФормат командной строки --version-checkТип Булево Проверить версию сервера, к которому подключается mysql_upgrade, чтобы убедиться, что она совпадает с версией, для которой была построена mysql_upgrade. Если нет, mysql_upgrade завершается. Этот параметр включён по умолчанию; чтобы отключить проверку, используйте
--skip-version-check. -
Формат командной строки --write-binlogТип Булево Значение по умолчанию OFFПо умолчанию ведение бинарного журнала mysql_upgrade отключено. Вызовите программу с
--write-binlog, если нужно записать её действия в бинарный журнал.Если на сервере включены глобальные идентификаторы транзакций (GTID) (
gtid_mode=ON), не включайте ведение бинарного журнала mysql_upgrade.
© 2025 Oracle
Licensed under the GPLv2 License.