Spec-Zone.ru › MySQL Shell 9.2

10.11 Модернизация репликации InnoDB

Для модернизации экземпляров в репликации InnoDB выполните следующие шаги:

  1. Модернизировать MySQL Router.

  2. Модернизировать MySQL Shell.

  3. Модернизировать MySQL Server.

  4. Проверить статус после модернизации.

Проверьте версии установленных бинарных файлов:

  • mysqlrouter --version: Проверяет версию установленного MySQL Router.

  • mysqlsh --version: Проверяет версию установленного MySQL Shell.

  • mysqld --version: Проверяет версию установленного MySQL Server.

Модернизация MySQL Router.

Для модернизации MySQL Router выполните следующие шаги:

  1. Остановите 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.

  2. Получите и установите последнюю версию MySQL Router.

  3. Запустите 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:

  1. Получите и установите последнюю версию MySQL Shell.

  2. Остановите и выйдите из MySQL Shell, выполнив:

    \q
    
  3. Перезапустите MySQL Shell из командной строки, выполнив:

    mysqlsh
    
  4. Обновите метаданные InnoDB ReplicaSet:

    • Для модернизации репликации InnoDB подключите глобальную сессию MySQL Shell к вашей репликации и используйте операцию dba.upgradeMetadata() для модернизации метаданных репликации до новых метаданных.

      Функция dba.upgradeMetadata() сравнивает версию установленной схемы метаданных с версией схемы метаданных, поддерживаемой этим Shell. Если версия установленных метаданных ниже, запускается процесс модернизации.

    Обновление метаданных

    Обновление метаданных может ничего не делать, если репликация уже использует последнюю версию.

Модернизация MySQL Server

Обновите MySQL Server, модернизируя все вторичные экземпляры перед модернизацией первичного экземпляра.

Модернизация MySQL Server необязательна

Модернизация MySQL Server необязательна. Модернизация сервера может иметь большее влияние, чем модернизация MySQL Shell и MySQL Router. Кроме того, вы всегда должны поддерживать MySQL Shell и MySQL Router в последней версии, даже если сервер не обновлен; это верно для InnoDB кластеров и репликаций.

  1. Остановите 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
      
  2. Обновите MySQL Server до последней версии.

  3. Запустите 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
      
  4. После обновления всех вторичных экземпляров, обновите первичный экземпляр, чтобы завершить процесс обновления.

    В InnoDB ReplicaSet нет автоматической смены первичного экземпляра. Вам необходимо установить первичный экземпляр на уже обновленный член до обновления первичного экземпляра.

    Установите обновленный вторичный экземпляр как первичный экземпляр:

    <ReplicaSet>.setPrimaryInstance('<host>:<port>')
    

    Используйте операцию <ReplicaSet>.setPrimaryInstance(), чтобы безопасно выполнить изменение первичного экземпляра репликации на другой экземпляр. Текущий первичный экземпляр понижается до вторичного и делается только для чтения, а повышенный экземпляр становится новым первичным и делается доступным для чтения и записи. Все остальные вторичные экземпляры обновляются для репликации с нового первичного экземпляра. Экземпляры MySQL Router, которые вы настроили на репликацию, автоматически начинают перенаправлять клиентов чтения/записи на новый первичный экземпляр.

    Обновите old первичный экземпляр. После обновления, вы можете использовать <ReplicaSet>.setPrimaryInstance(), чтобы восстановить этот обновленный экземпляр обратно в первичный. Более подробную информацию см. в Разделе 10.7, «Изменение первичного экземпляра».

END_OF_DOCUMENT_MARKER

Проверка состояния репликации после обновления

После обновления 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(instance) настраивает каждый экземпляр, который вы хотите использовать в репликации. MySQL Shell может подключиться к экземпляру и настроить его, или вы можете указать имя 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.
https://docs.oracle.com/cd/E17952_01/mysql-shell-9.2-en/upgrade-mysql-replicaset-from-8027to8028.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API