9.11 Модернизация набора реплик InnoDB
Для модернизации экземпляров в наборе реплик InnoDB выполните следующие шаги:
Проверьте версии установленных бинарных файлов:
mysqlrouter --version: Проверяет версию установленного MySQL Router.
mysqlsh --version: Проверяет версию установленного MySQL Shell.
mysqld --version: Проверяет версию установленного MySQL Server.
Модернизация MySQL Router.
Для модернизации MySQL Router выполните следующие шаги:
-
Остановите MySQL Router.
В Unix-подобных системах, если вы использовали необязательный
--directoryпараметр начальной настройки, создаётся автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте при настройке маршрутизатора. Эти файлы включаютstop.sh. Перейдите в этот каталог и выполните следующую команду:./stop.shВ Microsoft Windows, если вы использовали необязательный
--directoryпараметр начальной настройки, создаётся автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте при настройке маршрутизатора. Эти файлы включаютstop.ps1. Перейдите в этот каталог и выполните следующую команду:.\stop.ps1Или в Linux-системе, использующей
systemd, остановите службу MySQL Router, выполнив:systemctl stop mysqlrouter.serviceВ противном случае, завершите процесс с помощью ID процесса (PID) соответствующего процесса mysqlrouter.
Скачайте последнюю версию MySQL Router.
-
Запустите MySQL Router.
В Unix-подобных системах, если вы использовали необязательный -
-directoryпараметр начальной настройки, создаётся автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте. Эти файлы включаютstart.sh. Перейдите в каталог и выполните эту команду:./start.shЕсли путь к новому маршрутизатору изменился, необходимо обновить скрипт оболочки
start.sh, отразив новый путь.#!/bin/bash basedir=/tmp/myrouter ROUTER_PID=$basedir/mysqlrouter.pid /usr/bin/mysqlrouter -c $basedir/mysqlrouter.conf & disown %-
Если вы модернизируете MySQL Router вручную, а не используя средства управления пакетами, вы можете обновить
basedir=. Повторная начальная настройка маршрутизатора также пересоздаёт скрипт оболочкиstart.sh.Или в Linux-системе, использующей
systemd, запустите службу MySQL Router, выполнив:systemctl start mysqlrouter.serviceВ Microsoft Windows, если вы использовали необязательный -
-directoryпараметр начальной настройки, создаётся автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте. Эти файлы включаютstart.ps1. Перейдите в каталог и выполните эту команду:.\start.ps1При запуске MySQL Router с новыми бинарными файлами версия маршрутизатора обновляется:
mysqlrouter --version
Модернизация MySQL Shell
Обновите MySQL Shell, установив новые бинарные файлы и остановив, а затем запустив MySQL Shell:
Получите и установите последнюю версию MySQL Shell.
-
Остановите и выйдите из MySQL Shell, выполнив:
\q -
Перезапустите MySQL Shell из командной строки, выполнив:
mysqlsh -
Обновите метаданные InnoDB ReplicaSet:
-
Для модернизации набора реплик InnoDB подключите глобальную сессию MySQL Shell к вашему набору реплик и используйте операцию
dba.upgradeMetadata()для обновления метаданных набора реплик до новых метаданных.Функция
dba.upgradeMetadata()сравнивает версию установленной схемы метаданных с версией схемы метаданных, поддерживаемой этим Shell. Если установленная версия метаданных ниже, запускается процесс модернизации.
Модернизация метаданныхМодернизация метаданных может ничего не сделать, если набор реплик уже использует последнюю версию.
-
Модернизация MySQL Server
Модернизируйте MySQL Server, обновив все вторичные экземпляры перед обновлением первичного экземпляра.
Модернизация MySQL Server необязательна. Модернизация сервера может иметь большее влияние, чем обновление MySQL Shell и MySQL Router. Также, вы всегда должны поддерживать MySQL Shell и MySQL Router в последней версии, даже если сервер не обновлён; это справедливо для InnoDB Clusters и ReplicaSets.
-
Остановите MySQL Server, выполнив одну из следующих команд:
-
Если MySQL Server использует systemd, выполните:
systemctl stop mysqld -
Если MySQL Server использует init.d, выполните:
/etc/init.d/mysql stop -
Если MySQL Server использует service, выполните:
service mysql stop -
Если вы развернули MySQL Server в Microsoft Windows, выполните:
mysqladmin -u root -p shutdown
-
Скачайте последнюю версию MySQL Server.
-
Запустите MySQL Server, выполнив одну из следующих команд:
-
Если MySQL Server использует systemd, выполните:
systemctl start mysqld -
Если MySQL Server использует init.d, выполните:
/etc/init.d/mysql start -
Если MySQL Server использует service, выполните:
service mysql start -
Если вы развернули MySQL Server в Microsoft Windows, выполните:
mysqld
-
-
После обновления всех вторичных экземпляров обновите первичный экземпляр для завершения процесса обновления.
В InnoDB ReplicaSet нет автоматической смены первичного экземпляра. Вам необходимо назначить первичным экземпляром уже обновлённый вторичный экземпляр перед обновлением первичного экземпляра.
Назначьте обновлённый вторичный экземпляр первичным:
<ReplicaSet>.setPrimaryInstance('<host>:<port>')Используйте операцию
<ReplicaSet>.setPrimaryInstance()для безопасного переключения первичного экземпляра набора реплик на другой экземпляр. Текущий первичный экземпляр понижается до вторичного и делается только для чтения, в то время как выбранный экземпляр становится новым первичным и делается доступным для записи. Все остальные вторичные экземпляры обновляются для репликации с нового первичного. Экземпляры MySQL Router, которые вы настроили для работы с набором реплик, автоматически начинают перенаправлять клиенты для записи в новый первичный экземпляр.Обновите
oldпервичный экземпляр. После обновления вы можете использовать<ReplicaSet>.setPrimaryInstance()для возвращения этого обновлённого экземпляра в состояние первичного. Более подробная информация приведена в разделе 9.7, «Изменение первичного экземпляра».
Проверка состояния после модернизации
После модернизации MySQL Router, MySQL Shell и MySQL Server:
-
Проверьте состояние набора реплик, выполнив
<ReplicaSet>.status(). В следующем примере,<ReplicaSet>.status()возвращаетinstanceErrors:mysqlsh> <ReplicaSet>.status(); { "replicaSet": { "name": "myReplicaSet", "primary": "example-el7-1644251369:30014", "status": "AVAILABLE", "statusText": "All instances available.", "topology": { "example-el7-1644251369:30011": { "address": "example-el7-1644251369:30011", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" }, "example-el7-1644251369:30014": { "address": "example-el7-1644251369:30014", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE" }, "example-el7-1644251369:30017": { "address": "example-el7-1644251369:30017", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" }, "example-el7-1644251369:30021": { "address": "example-el7-1644251369:30021", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" } }, "type": "ASYNC" } }instanceErrorсообщает нам о необходимости выполнитьdba.configureReplicaSetInstance()для устранения ошибки.dba.configureReplicaSetInstance(настраивает каждый экземпляр, который вы хотите использовать в наборе реплик. MySQL Shell может либо подключиться к экземпляру, а затем настроить его, либо вы можете передать имяinstance)instanceдля настройки определённого удалённого экземпляра. Более подробная информация приведена в разделе 6.2.3, «Сохранение настроек».Следующий пример показывает вывод
<ReplicaSet>.status(), если у членаPRIMARYустановленыread_onlyилиsuper_read_onlyв значениеON:mysqlsh > <ReplicaSet>.status(); replicaset.status(); { "replicaSet": { "name": "myReplicaSet", "primary": "example-el7-1644251369:30014", "status": "UNAVAILABLE", "statusText": "PRIMARY instance is not available, but there is at least one SECONDARY that could be force-promoted.", "topology": { "example-el7-1644251369:30011": { "address": "example-el7-1644251369:30011", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" }, "example-el7-1644251369:30014": { "address": "example-el7-1644251369:30014", "fenced": true, "instanceErrors": [ "ERROR: Instance is a PRIMARY but is READ-ONLY: read_only=ON, super_read_only=ON", "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "PRIMARY", "mode": "R/O", "status": "ERROR" }, "example-el7-1644251369:30017": { "address": "example-el7-1644251369:30017", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" }, "example-el7-1644251369:30021": { "address": "example-el7-1644251369:30021", "instanceErrors": [ "NOTE: The required parallel-appliers settings are not enabled on the instance. Use dba.configureReplicaSetInstance() to fix it." ], "instanceRole": "SECONDARY", "mode": "R/O", "replication": { "applierStatus": "APPLIED_ALL", "applierThreadState": "Waiting for an event from Coordinator", "applierWorkerThreads": 4, "receiverStatus": "ON", "receiverThreadState": "Waiting for source to send event", "replicationLag": null }, "status": "ONLINE" } }, "type": "ASYNC" } }Более подробная информация приведена в разделе 9.10, «Проверка состояния набора реплик InnoDB».
© 2025 Oracle
Licensed under the GPLv2 License.