Spec-Zone.ru › MySQL Shell 8.4

9.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 Clusters и ReplicaSets.

  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() для возвращения этого обновлённого экземпляра в состояние первичного. Более подробная информация приведена в разделе 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(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"
        }
    }
    

    Более подробная информация приведена в разделе 9.10, «Проверка состояния набора реплик InnoDB».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/upgrade-mysql-replicaset-from-8027to8028.html

Spec-Zone.ru

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