10.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 кластеров и репликаций.
-
Остановите 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(), чтобы восстановить этот обновленный экземпляр обратно в первичный. Более подробную информацию см. в Разделе 10.7, «Изменение первичного экземпляра».
Проверка состояния репликации после обновления
После обновления MySQL Router, MySQL Shell и MySQL Servers:
-
Проверьте состояние репликации, выполнив команду
<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" } }Дополнительную информацию см. в разделе 10.10, «Проверка состояния репликации InnoDB».
© 2025 Oracle
Licensed under the GPLv2 License.