mariadb-upgrade
mariadb-upgrade — это инструмент, который проверяет и обновляет ваши таблицы до последней версии.
Начиная с MariaDB 10.4.6, mariadb-upgrade является символической ссылкой на mysql_upgrade, инструмент, который проверяет и обновляет ваши таблицы до последней версии.
Начиная с MariaDB 10.5.2, mysql_upgrade является символической ссылкой, а mariadb-upgrade — именем исполняемого файла.
Начиная с mysql_upgrade / mariadb-upgrade 2.0, пользователю, выполняющему инструмент обновления, необходимо иметь права записи в datadir/mysql_upgrade_info, чтобы инструмент мог записать текущую версию MariaDB в файл. mysql-upgrade была обновлена в MariaDB 10.2.42, MariaDB 10.3.33, MariaDB 10.4.23, MariaDB 10.5.14, MariaDB 10.6.6, MariaDB 10.7.2 и более поздних версиях.
Вы должны запустить mariadb-upgrade после обновления с одной основной версии MySQL/MariaDB на другую, например, с MySQL 5.0 до MariaDB 10.4 или MariaDB 10.4 до MariaDB 10.5. Вы также должны использовать mariadb-upgrade после прямой «горизонтальной» миграции, например, с MySQL 5.5.40 до MariaDB 5.5.40. Также безопасно запускать mariadb-upgrade для незначительных обновлений, так как при отсутствии несовместимостей ничего не меняется.
Он должен выполняться пользователем с правами записи в каталоге данных.
mariadb-upgrade выполняется после запуска нового сервера MariaDB. Запуск его до остановки старой версии не навредит и позволит убедиться в его работе и заранее выяснить аутентификацию для него.
Рекомендуется сделать резервную копию всех баз данных перед запуском mariadb-upgrade.
В большинстве случаев mariadb-upgrade займет всего несколько секунд. Основная работа mariadb-upgrade заключается в:
- Обновлении системных таблиц в базе данных
mysqlдо последней версии (обычно это добавление новых полей в несколько таблиц). - Проверке актуальности всех таблиц (выполняется CHECK TABLE table_name FOR UPGRADE). Для таблиц, которые не актуальны, выполняется ALTER TABLE table_name FORCE для их обновления. Таблица считается неактуальной, если:
- Таблица использует индекс, для которого произошла смена кодировки (редко)
- Изменение формата в хранилище требует обновления (очень редко)
Использование mariadb-upgrade
mariadb-upgrade [--force] [--user=# --password=# --host=hostname --port=# --socket=# --protocol=tcp|socket|pipe|memory --verbose] [OTHER_OPTIONS]
mariadb-upgrade — в основном фреймворк для вызова mariadb-check. mariadb-upgrade работает, выполняя следующие операции:
# Find out path to datadir echo "show show variables like 'datadir'" | mysql mariadb-check --no-defaults --check-upgrade --auto-repair --databases mysql mysql_fix_privilege_tables mariadb-check --no-defaults --all-databases --fix-db-names --fix-table-names mariadb-check --no-defaults --check-upgrade --all-databases --auto-repair
Параметры подключения, задаваемые для mariadb-upgrade, передаются в mariadb-check и mysql.
Сценарий mysql_fix_privilege_tables фактически не вызывается; он включён в состав mariadb-upgrade
Если у вас возникла проблема с mariadb-upgrade, попробуйте запустить его в очень подробном режиме:
mariadb-upgrade --verbose --verbose other-options
mariadb-upgrade также сохраняет номер версии MariaDB в файле с именем mysql_upgrade_info в каталоге данных. Это используется для быстрого проверки, были ли все таблицы проверены для этого выпуска, чтобы проверку таблиц можно было пропустить. По этой причине mariadb-upgrade необходимо запускать как пользователя с правами записи в каталоге данных. Чтобы проигнорировать этот файл и выполнить проверку независимо, используйте параметр --force.
Параметры
mariadb-upgrade поддерживает следующие параметры:
| Вариант | Описание | Версия |
|---|---|---|
-?, --help
|
Отобразить это сообщение справки и выйти. | |
--basedir=path |
Старый вариант, принятый для обратной совместимости, но игнорируется. | |
--character-sets-dir=path |
Старый вариант, принятый для обратной совместимости, но игнорируется. | |
check-if-upgrade-is-needed |
Быстро проверить, нужна ли модернизация. Возвращает 0, если да, и 1, если нет. | 2.0 |
--compress=name |
Старый вариант, принятый для обратной совместимости, но игнорируется. | |
--datadir=name |
Старый вариант, принятый для обратной совместимости, но игнорируется. | |
-# [name], --debug[=name]
|
Для отладочных сборок вывести отладочный журнал. | |
--debug-check |
Проверить использование памяти и открытых файлов при выходе. | |
-T, --debug-info
|
Вывести некоторую отладочную информацию при выходе. | |
--default-character-set=name |
Старый вариант, принятый для обратной совместимости, но игнорируется. | |
-f, --force
|
Вынудить выполнение mariadb-check, даже если mariadb-upgrade уже было выполнено для текущей версии MariaDB. Игнорирует mysql_upgrade_info. |
|
-h, --host=name
|
Подключиться к MariaDB на указанном хосте. | |
-p, --password[=name]
|
Пароль для подключения к серверу. Если пароль не задан, он запрашивается в командной строке (что следует считать небезопасным). Вы можете использовать файл параметров, чтобы избежать ввода пароля в командной строке. | |
-P, --port=name
|
Номер порта для подключения или 0 для использования по умолчанию, в порядке предпочтения: my.cnf, переменная среды MYSQL_TCP_PORT переменная среды, /etc/services, встроенный по умолчанию (3306). | |
--protocol=name |
Протокол для подключения (tcp, socket, pipe, memory). | |
--silent |
Вывести меньше информации. | |
-S, --socket=name
|
Для подключений к localhost, файл Unix-сокет для использования или, в Windows, имя именованной трубы для использования. | |
--ssl |
Включает TLS. TLS также включён, даже без установки этого параметра, когда заданы определённые другие параметры TLS. Начиная с MariaDB 10.2, параметр --ssl по умолчанию не включает проверку сертификата сервера. Для проверки сертификата сервера необходимо указать параметр --ssl-verify-server-cert. |
|
--ssl-ca=name |
Определяет путь к файлу PEM, который должен содержать один или несколько сертификатов X509 для доверенных центров сертификации (ЦС) для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Более подробная информация представлена в разделе Обзор безопасных подключений: Центры сертификации (ЦС). Этот параметр подразумевает параметр --ssl. |
|
--ssl-capath=name |
Определяет путь к каталогу, содержащему один или несколько файлов PEM, каждый из которых должен содержать один сертификат X509 для доверенного центра сертификации (ЦС) для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Каталог, указанный этим параметром, должен быть обработан командой openssl rehash. Более подробная информация представлена в разделе Обзор безопасных подключений: Центры сертификации (ЦС). Этот параметр поддерживается только в том случае, если клиент был скомпилирован с OpenSSL или yaSSL. Если клиент был скомпилирован с GnuTLS или Schannel, то этот параметр не поддерживается. Дополнительная информация о используемых библиотеках на платформах представлена в разделе TLS и криптографические библиотеки, используемые MariaDB. Этот параметр подразумевает параметр --ssl. |
|
--ssl-cert=name |
Определяет путь к файлу сертификата X509 для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Этот параметр подразумевает параметр --ssl. |
|
--ssl-cipher=name |
Список разрешенных шифров или наборов шифров для использования с TLS. Этот параметр подразумевает параметр --ssl. |
|
--ssl-crl=name |
Определяет путь к файлу PEM, который должен содержать один или несколько аннулированных сертификатов X509 для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Более подробная информация представлена в разделе Обзор безопасных подключений: списки аннулированных сертификатов (CRL). Этот параметр поддерживается только в том случае, если клиент был скомпилирован с OpenSSL или Schannel. Если клиент был скомпилирован с yaSSL или GnuTLS, то этот параметр не поддерживается. Дополнительная информация о используемых библиотеках на платформах представлена в разделе TLS и криптографические библиотеки, используемые MariaDB. | |
--ssl-crlpath=name |
Определяет путь к каталогу, содержащему один или несколько файлов PEM, каждый из которых должен содержать один аннулированный сертификат X509 для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Каталог, указанный этим параметром, должен быть обработан командой openssl rehash. Более подробная информация представлена в разделе Обзор безопасных подключений: списки аннулированных сертификатов (CRL). Этот параметр поддерживается только в том случае, если клиент был скомпилирован с OpenSSL. Если клиент был скомпилирован с yaSSL, GnuTLS или Schannel, то этот параметр не поддерживается. Дополнительная информация о используемых библиотеках на платформах представлена в разделе TLS и криптографические библиотеки, используемые MariaDB. | |
--ssl-key=name |
Определяет путь к файлу закрытого ключа для использования с TLS. Этот параметр требует использования абсолютного пути, а не относительного. Этот параметр подразумевает параметр --ssl. |
|
--ssl-verify-server-cert |
Включает проверку сертификата сервера. Этот параметр отключён по умолчанию. | |
-t, --tmpdir=name
|
Директория для временных файлов. | |
-s, --upgrade-system-tables
|
Модернизировать только таблицы системы в базе данных mysql. Таблицы в других базах данных не проверяются и не изменяются. | |
-u, --user=name
|
Пользователь для входа, если это не текущий пользователь. | |
-v, --verbose
|
Отобразить больше информации о процессе, используя его дважды, отобразятся аргументы подключения; используя его трижды, будут выведены все команды CHECK, RENAME и ALTER TABLE, используемые во время фазы проверки; используя его четыре раза, также будут выведены все команды mariadb-check. | |
-V, --version
|
Вывести информацию о версии и выйти. | |
-k, --version-check
|
Запустить эту программу только в том случае, если её «версия сервера» совпадает с версией сервера, к которому она подключается. Примечание: «версия сервера» программы — это версия сервера MariaDB, с которой она была скомпилирована/распространена. (По умолчанию включено; используйте --skip-version-check для отключения.) |
|
--write-binlog |
Все команды, включая те, что выполняются mariadb-check, записываются в бинарный журнал. Отключено по умолчанию. До MariaDB 10.0.6 и MariaDB 5.5.34 это было включено по умолчанию, и --skip-write-binlog следует использовать, когда команды не должны отправляться реплицирующим серверам. |
mariadb-upgrade 2.0
mariadb-upgrate/mysql_upgrade 2.0 было представлено в MariaDB 10.2.42, MariaDB 10.3.33, MariaDB 10.4.23, MariaDB 10.5.14, MariaDB 10.6.6, MariaDB 10.7.2.
Ранее инструмент сначала запускал процесс модернизации, а затем создавал файл datadir/mysql_upgrade_info. Если файл не мог быть создан из-за прав доступа (у mariadb-upgrade не было прав на создание файла), mariadb-upgrad выдавал ошибку, но это часто игнорировалось. Одним из последствий невозможности создания файла mysql_upgrade_info было то, что каждый новый запуск mariadb-upgrade должен был выполнять полную проверку модернизации, что может занять много времени, если таблиц много.
mariadb-upgrade 2.0 исправляет следующие проблемы:
- Теперь
datadir/mysql_upgrade_infoсоздается в начале процесса обновления и блокируется. Это гарантирует, что два процессаmariadb-upgradeне могут выполняться параллельно, что может привести к тупиковым ситуациям (MDEV-27068). Одним из побочных эффектов этого является то, чтоmariadb-upgradeдолжен иметь права записи вdatadir, что означает, что он должен выполняться как пользователь, установивший MariaDB, обычно 'mysql' или 'root' . - Можно использовать
mariadb-upgrade --force --forceдля принудительного выполнения обновления, даже если не было изменения версии или если у вас нет прав записи вdatadir. Обратите внимание, что если этот параметр используется, следующее выполнениеmariadb-upgradeпредположит, что произошло изменение основной версии, и обновление должно быть выполнено (снова). - Обновление будет выполнено только в случае изменения основной версии сервера (10.4.X -> 10.5.X). Это позволит избежать ненужных обновлений.
- Добавлен новый параметр:
--check-if-upgrade-is-needed. Если он используется,mariadb-upgradeвернёт 0, если произошло изменение основной версии, и следует запуститьmariadb-upgrade. Если обновление не требуется, будет возвращено 1. -
--verboseзаписывает больше информации, включая информацию о том, с какой версии на какую версию будет выполнено обновление. - Улучшены сообщения, когда нет необходимости запускать
mariadb-upgrade.
Файлы параметров
Помимо считывания параметров из командной строки, mariadb-upgrade также может считывать параметры из файлов параметров. Если в файле параметров mariadb-upgrade будет передан неизвестный параметр, он будет проигнорирован.
Следующие параметры относятся к тому, как инструменты командной строки MariaDB обрабатывают файлы параметров. Они должны быть указаны в качестве первого аргумента в командной строке:
| Параметр | Описание |
|---|---|
--print-defaults |
Вывести список аргументов программы и выйти. |
--no-defaults |
Не читать параметры по умолчанию из какого-либо файла параметров. |
--defaults-file=# |
Читать параметры по умолчанию только из указанного файла №. |
--defaults-extra-file=# |
Прочитать этот файл после чтения глобальных файлов. |
--defaults-group-suffix=# |
В дополнение к группам параметров по умолчанию, также прочитать группы параметров с этим суффиксом. |
В MariaDB 10.2 и более поздних версиях mariadb-upgrade связан с MariaDB Connector/C. Однако MariaDB Connector/C пока не обрабатывает разбор файлов параметров для этого клиента. Это всё ещё выполняется кодом разбора файла параметров сервера. Подробнее см. MDEV-19035.
Группы параметров
mariadb-upgrade считывает параметры из следующих групп параметров из файлов параметров:
| Группа | Описание |
|---|---|
[mysql_upgrade] |
Параметры, считываемые mariadb-upgrade, включая как MariaDB Server, так и MySQL Server. |
[mariadb-upgrade] |
Параметры, считываемые mariadb-upgrade. Доступно начиная с MariaDB 10.4.6. |
[client] |
Параметры, считываемые всеми клиентами MariaDB и MySQL клиентскими программами, включая как MariaDB, так и MySQL клиенты. Например, mysqldump. |
[client-server] |
Параметры, считываемые всеми программами клиентов MariaDB и MariaDB Server. Это полезно для параметров, таких как сокет и порт, которые являются общими для сервера и клиентов. |
[client-mariadb] |
Параметры, считываемые всеми программами клиентов MariaDB. |
Отличия между mysql_upgrade в MariaDB и MySQL
На данный момент, начиная с MariaDB 5.1.50:
- MariaDB корректно обработает длинные имена таблиц.
- MariaDB конвертирует таблицы InnoDB (нет необходимости в создании дампов/восстановления или
ALTER TABLE). - MariaDB преобразует старые архивные таблицы в новый формат 5.1.
- "mysql_upgrade --verbose" выполнит "mariadb-check --verbose", чтобы предоставить больше информации о происходящем. Выполнение с 3 раза --verbose в MariaDB 10.0 выведет все команды CHECK, RENAME и ALTER TABLE, которые были выполнены.
- Таблица mysql.event обновляется в режиме реального времени; не требуется перезапуск сервера для использования событий, если таблица событий изменилась (MariaDB 10.0.22 и MariaDB 10.1.9).
- Более подробный вывод.
Ускорение обновления mariadb
- Если вы уверены, что все ваши таблицы обновлены до текущей версии, вы можете запустить mariadb-upgrade ---upgrade-system-tables, что исправит только таблицы системы в базе данных mysql для совместимости с последней версией.
Основная причина запуска mariadb-upgrade для всех ваших таблиц заключается в проверке того, что:
- Не произошло никаких изменений в формате таблиц между версиями.
- Это не происходило с MariaDB 5.1.
- Если некоторые таблицы используют индекс, для которого был изменён порядок сортировки.
- Это не происходило с MariaDB 5.5.
Если вы на 100% уверены, что это относится к вам, вы можете просто запустить mariadb-upgrade с параметром ---upgrade-system-tables.
Симптомы, указывающие на то, что mariadb-upgrade не был запущен, когда это было необходимо
- Ошибки в файле журнала ошибок, указывающие на то, что некоторые системные таблицы не содержат всех необходимых столбцов.
- Обновления или поиск могут не найти запись, которую пытаются обновить или найти.
- CHECKSUM TABLE может указывать неверную контрольную сумму для таблиц MyISAM или Aria.
- Сообщение об ошибке "Невозможно загрузить mysql.proc. Вероятно, таблица повреждена".
Для решения таких проблем запустите mariadb-upgrade, mariadb-check, CHECK TABLE и при необходимости REPAIR TABLE на неправильной таблице.
Другие использования
-
mariadb-upgradeпересоздаст любые отсутствующие таблицы в базе данных mysql. Он не будет изменять данные в существующих таблицах.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/mariadb-upgrade/