Spec-Zone.ru › MySQL Shell 9.2

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

    ./stop.sh
    

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

    .\stop.ps1
    

    Или в Linux-системе, использующей systemd, остановите службу MySQL Router, выполнив следующую команду:

    systemctl stop mysqlrouter.service

    В противном случае, завершите процесс с идентификатором процесса (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:

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

    Модернизация метаданных

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

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

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

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

Модернизация MySQL Server необязательна. Модернизация сервера может иметь большее влияние, чем модернизация MySQL Shell и MySQL Router. Также вы всегда должны поддерживать MySQL Shell и MySQL Router на последней версии, даже если сервер не обновлен; это относится к кластерам InnoDB и 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. После модернизации всех вторичных экземпляров, модернизируйте первичный экземпляр, чтобы завершить процесс модернизации.

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

После обновления MySQL Router, MySQL Shell и MySQL серверов необходимо:

  1. Проверить кластер с помощью команды <Cluster>.status(). Дополнительную информацию о <Cluster>.status() см. в разделе Проверка состояния кластера с помощью Cluster.status().

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

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

Примечание

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

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

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

        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().

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

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

    ...
    "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() позволяет повторно просканировать кластер на наличие новых и устаревших экземпляров Group Replication, а также изменений в используемом режиме топологии. Дополнительную информацию см. в разделе Пересканирование кластера.

    mysqlsh> <Cluster>.rescan();
    Rescanning the cluster...
    
    Result of the rescanning operation for the 'MyCluster1' cluster:
    {
        "name": "MyCluster1",
        "newTopologyMode": null,
        "newlyDiscoveredInstances": [],
        "unavailableInstances": [],
        "updatedInstances": []
    }
    

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

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

      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.
    

Информацию по устранению неполадок при обновлении кластера см. в разделе Устранение неполадок при обновлении InnoDB Cluster.

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

Spec-Zone.ru

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