Spec-Zone.ru › MySQL Shell 9.2

9.12 Обновление InnoDB ClusterSet

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

  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 параметр bootstrap, создана автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте при инициализации маршрутизатора. Эти файлы включают stop.sh. Перейдите в этот каталог и выполните эту команду:

    ./stop.sh
    

    В Microsoft Windows, если вы использовали необязательный --directory параметр bootstrap, создана автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте при инициализации маршрутизатора. Эти файлы включают stop.ps1. Перейдите в этот каталог и выполните эту команду:

    .\stop.ps1
    

    Или в Linux-системах, используя systemd, остановите службу MySQL Router, выполнив:

    systemctl stop mysqlrouter.service

    В противном случае, завершите процесс с ID процесса (PID) связанного процесса mysqlrouter.

  2. Загрузите и установите последнюю версию MySQL Router.

  3. Запустите MySQL Router.

    В Unix-подобных системах, если вы использовали необязательный --directory параметр bootstrap, создана автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте. Эти файлы включают 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 параметр bootstrap, создана автономная установка со всеми сгенерированными каталогами и файлами в выбранном вами месте. Эти файлы включают 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 ClusterSet:

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

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

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

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

Обновление MySQL Server

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

При обновлении каждого кластера, первичного или реплицированного, обновите все вторичные экземпляры перед обновлением первичного экземпляра.

Обновление MySQL Server необязательно

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

Для получения подробной информации об обновлении с помощью Group Replication, см. .

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

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

После обновления MySQL Router, MySQL Shell и MySQL Server:

  1. Проверьте состояние ClusterSet, выполнив команду <ClusterSet>.status(). Дополнительную информацию о <ClusterSet>.status() см. в разделе 9.7 «Состояние и топология InnoDB ClusterSet».

  2. Устраните любые clusterErrors и statusText, возвращаемые операцией <ClusterSet>.status().

  3. Проверьте каждый кластер в ClusterSet, выполнив команду <Cluster>.status() и устраните любые проблемы. Дополнительную информацию о <Cluster>.status() см. в разделе «Проверка состояния кластера с помощью Cluster.status()».

  4. Проверьте детали всех зарегистрированных экземпляров MySQL Router, выполнив команду <ClusterSet>.listRouters(). Дополнительную информацию см. в разделе «Интеграция MySQL Router с InnoDB ClusterSet».

Эти команды помогут вам проверить, было ли обновление успешным, или вам необходимо выполнить дополнительные шаги.

Примечание

Дополнительные шаги зависят от того, сколько версий вы пропустили, какой версии вы обновляетесь и с какой версии вы обновляетесь.

  1. Начните проверку после обновления, проверив состояние InnoDB ClusterSet. Эта проверка использует <ClusterSet>.status({extended:1}) operation.

    В этом примере мы выполняем команду <ClusterSet>.status({extended:1}):

      mysql-js><ClusterSet>.status({extended:1})
    {
        "clusters": {
            "cluster1": {
                "clusterRole": "PRIMARY",
                "globalStatus": "OK",
                "primary": "127.0.0.1:3310",
                "status": "OK_NO_TOLERANCE",
                "statusText": "Cluster is NOT tolerant to any failures.",
                "topology": {
                    "127.0.0.1:3310": {
                        "address": "127.0.0.1:3310",
                        "memberRole": "PRIMARY",
                        "mode": "R/W",
                        "status": "ONLINE",
                        "version": "8.0.28"
                    }
                },
                "transactionSet": "c0361cad-9093-11ec-94ce-0a0027000010:1-90,c0362acf-9093-11ec-94ce-0a0027000010:1"
            },
            "replicacluster1": {
                "clusterErrors": [
                    "ERROR: Cluster members are reachable but they're all OFFLINE.",
                    "WARNING: Replication from the Primary Cluster not in expected state"
                ],
                "clusterRole": "REPLICA",
                "clusterSetReplication": {
                    "applierStatus": "OFF",
                    "applierThreadState": "",
                    "applierWorkerThreads": 4,
                    "receiver": "127.0.0.1:3320",
                    "receiverStatus": "OFF",
                    "receiverThreadState": "",
                    "source": "127.0.0.1:3310"
                },
                "clusterSetReplicationStatus": "STOPPED",
                "globalStatus": "NOT_OK",
                "status": "OFFLINE",
                "statusText": "All members of the group are OFFLINE",
                "topology": {
                    "127.0.0.1:3320": {
                        "address": "127.0.0.1:3320",
                        "instanceErrors": [
                            "NOTE: group_replication is stopped."
                        ],
                        "memberRole": "SECONDARY",
                        "memberState": "OFFLINE",
                        "mode": "R/O",
                        "status": "(MISSING)",
                        "version": "8.0.28"
                    }
                },
                "transactionSet": "1ec95a0b-9094-11ec-9bc5-0a0027000010:1,c0361cad-9093-11ec-94ce
                                   -0a0027000010:1-90,c0362acf-9093-11ec-94ce-0a0027000010:1",
                "transactionSetConsistencyStatus": "OK",
                "transactionSetErrantGtidSet": "",
                "transactionSetMissingGtidSet": ""
            },
            "replicacluster2": {
                "clusterRole": "REPLICA",
                "clusterSetReplication": {
                    "applierStatus": "APPLIED_ALL",
                    "applierThreadState": "Waiting for an event from Coordinator",
                    "applierWorkerThreads": 4,
                    "receiver": "127.0.0.1:3330",
                    "receiverStatus": "ON",
                    "receiverThreadState": "Waiting for source to send event",
                    "source": "127.0.0.1:3310"
                },
                "clusterSetReplicationStatus": "OK",
                "globalStatus": "OK",
                "status": "OK_NO_TOLERANCE",
                "statusText": "Cluster is NOT tolerant to any failures.",
                "topology": {
                    "127.0.0.1:3330": {
                        "address": "127.0.0.1:3330",
                        "memberRole": "PRIMARY",
                        "mode": "R/O",
                        "replicationLagFromImmediateSource": "",
                        "replicationLagFromOriginalSource": "",
                        "status": "ONLINE",
                        "version": "8.0.28"
                    }
                },
                "transactionSet": "329dc243-9094-11ec-b9dd-0a0027000010:1,c0361cad-9093-11ec
                                   -94ce-0a0027000010:1-90,c0362acf-9093-11ec-94ce-0a0027000010:1",
                "transactionSetConsistencyStatus": "OK",
                "transactionSetErrantGtidSet": "",
                "transactionSetMissingGtidSet": ""
            }
        },
        "domainName": "clusterset1",
        "globalPrimaryInstance": "127.0.0.1:3310",
        "metadataServer": "127.0.0.1:3310",
        "primaryCluster": "cluster1",
        "status": "AVAILABLE",
        "statusText": "Primary Cluster available, there are issues with a Replica cluster."
    }
    

    Дополнительную информацию об операции <ClusterSet>.status() см. в ClusterSet.status().

  2. Устраните любые ошибки, возвращаемые операцией <ClusterSet>.status({extended:1}).

    В этом примере в clusterErrors возвращена ошибка, сообщая, что операция <ClusterSet>.status({extended:1}) не смогла подключиться ни к одному онлайн-члену, и с statusText, что основной кластер доступен, но есть проблемы с реплицирующим кластером в InnoDB ClusterSet.

      ...
      "replicacluster1": {
        "clusterErrors": [
                      "ERROR: Could not connect to any ONLINE members but there are unreachable instances
                              that could still be ONLINE."
                  ],
      ...
       "statusText": "Primary Cluster available, there are issues with a Replica cluster."
    }
    

    В этом примере необходимо проверить состояние InnoDB Cluster replicacluster1 и убедиться, что он снова доступен.

  3. После устранения проблем, возвращаемых операцией <ClusterSet>.status({extended:1}), проверьте состояние каждого InnoDB Cluster в ClusterSet.

    Проверьте состояние каждого InnoDB Cluster, выполнив команду <Cluster>.status().

    В приведенном ниже примере <Cluster>.status({extended: true}), используемый для предоставления более подробной информации о состоянии InnoDB Cluster, возвращает две проблемы:

        mysqlsh> cluster.status({extended: true});
        {
            "clusterName": "MyCluster",
            "defaultReplicaSet": {
                "GRProtocolVersion": "8.0.16",
                "groupName": "459ec434-8926-11ec-b8c3-02001707f44a",
                "groupViewChangeUuid": "AUTOMATIC",
                "groupViewId": "16443558036060755:13",
                "name": "default",
                "ssl": "REQUIRED",
                "status": "OK",
                "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
                "topology": {
                    "example-el7-1644251369:33311": {
                        "address": "example-el7-1644251369:33311",
                        "applierWorkerThreads": 4,
                        "fenceSysVars": [],
                        "instanceErrors": [
                            "NOTE: instance server_id is not registered in the metadata.
                                   Use cluster.rescan() to update the metadata.",
                            "NOTE: The required parallel-appliers settings are not enabled on the instance.
                                   Use dba.configureInstance() to fix it."
                        ],
                        "memberId": "247131ab-8926-11ec-850b-02001707f44a",
                        "memberRole": "PRIMARY",
                        "memberState": "ONLINE",
                        "mode": "R/W",
                        "readReplicas": {},
                        "replicationLag": null,
                        "role": "HA",
                        "status": "ONLINE",
                        "version": "8.0.28"
                    },
                    "example-el7-1644251369:33314": {
                        "address": "example-el7-1644251369:33314",
                        "applierWorkerThreads": 4,
                        "fenceSysVars": [],
                        "instanceErrors": [
                            "NOTE: instance server_id is not registered in the metadata.
                                   Use cluster.rescan() to update the metadata.",
                            "NOTE: The required parallel-appliers settings are not enabled on the instance.
                                   Use dba.configureInstance() to fix it."
                        ],
                        "memberId": "303dcfa7-8926-11ec-a6e5-02001707f44a",
                        "memberRole": "PRIMARY",
                        "memberState": "ONLINE",
                        "mode": "R/W",
                        "readReplicas": {},
                        "replicationLag": null,
                        "role": "HA",
                        "status": "ONLINE",
                        "version": "8.0.28"
                    },
                    "example-el7-1644251369:33317": {
                        "address": "example-el7-1644251369:33317",
                        "applierWorkerThreads": 4,
                        "fenceSysVars": [],
                        "instanceErrors": [
                            "NOTE: instance server_id is not registered in the metadata.
                                   Use cluster.rescan() to update the metadata.",
                            "NOTE: The required parallel-appliers settings are not enabled on the instance.
                                   Use dba.configureInstance() to fix it."
                        ],
                        "memberId": "3bb2592e-8926-11ec-8b6f-02001707f44a",
                        "memberRole": "PRIMARY",
                        "memberState": "ONLINE",
                        "mode": "R/W",
                        "readReplicas": {},
                        "replicationLag": null,
                        "role": "HA",
                        "status": "ONLINE",
                        "version": "8.0.28"
                    }
                },
                "topologyMode": "Multi-Primary"
            },
            "groupInformationSourceMember": "example-el7-1644251369:33311",
            "metadataVersion": "2.1.0"
        }
    

    <Cluster>.status({extended: true}) отображает более подробную информацию о кластере. В этом примере мы используем булево значение true, что эквивалентно <Cluster>.status({'extended':1}). Дополнительную информацию см. в разделе «Проверка состояния кластера с помощью Cluster.status()».

    instanceErrors предполагает, что в этом обновлении мы должны выполнить команды <Cluster>.rescan() и dba.configureInstance() для каждого узла в InnoDB Cluster:

    ...
    "NOTE: instance server_id is not registered in the
    metadata. Use cluster.rescan() to update the metadata.",
    "NOTE: The required parallel-appliers settings are not
    enabled on the instance. Use dba.configureInstance() to fix it."
    ...
    

    Операция <Cluster>.rescan() позволяет повторно сканировать InnoDB Cluster, чтобы обнаружить новые и устаревшие экземпляры Group Replication, а также изменения в используемом режиме топологии. Дополнительную информацию см. в разделе «Повторное сканирование кластера».

    mysqlsh> cluster1.rescan();
    Rescanning the cluster...
    
    Result of the rescanning operation for the 'MyCluster1' cluster:
    {
        "name": "MyCluster1",
        "newTopologyMode": null,
        "newlyDiscoveredInstances": [],
        "unavailableInstances": [],
        "updatedInstances": []
    }
    
    Примечание

    Вы можете выполнить команду <Cluster>.rescan() только для отдельных кластеров ClusterSet, а не для ClusterSet в целом.

    Функция dba.configureInstance() проверяет все настройки, необходимые для использования экземпляра в InnoDB Cluster. Дополнительную информацию см. в разделе «Настройка производственных экземпляров для использования в InnoDB Cluster».

    В этом примере мы выполняем команду dba.configureInstance() на каждом узле кластера, чтобы убедиться, что на экземпляре включены необходимые настройки parallel-appliers:

      mysqlsh> dba.configureInstance('cladmin:cladminpw@localhost:33311')
        The instance 'example-el7-1644251369:33311' belongs to an InnoDB Cluster.
        Configuring local MySQL instance listening at port 33311 for use in an InnoDB cluster...
    
        This instance reports its own address as ^[[1mexample-el7-1644251369:33311^[[0m
        Clients and other cluster members will communicate with it through this address by default.
        If this is not correct, the report_host MySQL system variable should be changed.
    
        applierWorkerThreads will be set to the default value of 4.
    
        ^[[36mNOTE: ^[[0mSome configuration options need to be fixed:
        +----------------------------------------+---------------+----------------+----------------------------+
        | Variable                               | Current Value | Required Value | Note                       |
        +----------------------------------------+---------------+----------------+----------------------------+
        | binlog_transaction_dependency_tracking | COMMIT_ORDER  | WRITESET       | Update the server variable |
        +----------------------------------------+---------------+----------------+----------------------------+
    
        Configuring instance...
        The instance 'example-el7-1644251369:33311' was configured to be used in an InnoDB cluster.
    
  4. После устранения проблем, возвращаемых операциями <ClusterSet>.status({extended:1}) и <Cluster>.status({extended:1}), необходимо выполнить команду <ClusterSet>.listRouters().

    <ClusterSet>.listRouters() возвращает сведения обо всех зарегистрированных экземплярах MySQL Router. Эти сведения предоставляют информацию о каждом зарегистрированном экземпляре MySQL Router, например, его имя в метаданных, имя хоста, порты и т. д. Дополнительную информацию см. в разделе «Интеграция MySQL Router с InnoDB ClusterSet».

    Например, в нашем ClusterSet мы выполняем команду:

    mysqlsh> <ClusterSet>.listRouters();
    
    WARNING: The following Routers were bootstrapped before the ClusterSet was created: [EXAMPLE::R1].
             Please re-bootstrap the Routers to ensure the optimal configurations are set.
    
    {
        "domainName": "MyClusterSet",
        "routers": {
            "EXAMPLE::R1": {
                "hostname": "EXAMPLE",
                "lastCheckIn": "2022-02-23 07:14:50",
                "roPort": 6447,
                "roXPort": 6449,
                "routerErrors": [
                    "WARNING: Router needs to be re-bootstraped."
                ],
                "rwPort": 6446,
                "rwXPort": 6448,
                "targetCluster": null,
                "version": "8.0.28"
            }
        }
    }

    Возвращаемая информация включает:

    • Имя экземпляра MySQL Router.

    • Отметка времени последней проверки, которая генерируется периодическим пингом от MySQL Router, хранящегося в метаданных.

    • Имя хоста, на котором работает экземпляр MySQL Router.

    • Порты чтение-только и чтение-запись, которые публикует MySQL Router для подключений к классическому протоколу MySQL.

    • Порты чтение-только и чтение-запись, которые публикует MySQL Router для подключений по протоколу X.

    • Имя целевого кластера. В этом примере MySQL Router направляет трафик от клиентских приложений к кластеру в развертывании InnoDB ClusterSet, который в настоящее время является основным кластером.

    • Версия данного экземпляра MySQL Router.

    В этом примере также есть информация о routerErrors.

    routerErrors сообщает нам, что MySQL Router необходимо перезагрузить. Причина этой ошибки заключается в том, что если вы создаете ClusterSet на основе этого автономного Cluster, то MySQL Router необходимо перезагрузить, чтобы уведомить Router о работе с ClusterSet.

    Устраните эти предупреждения, чтобы завершить проверки после обновления. Если вы не получите никаких предупреждений, проверки после обновления завершены.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-9.2-en/upgrade-mysql-clusterset.html

Spec-Zone.ru

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