Spec-Zone.ru › MySQL Shell 8.4

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

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

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

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

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

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

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

  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. Дополнительную информацию см. в статье Настройка производственных экземпляров для использования в InnoDB Cluster.

    В данном примере мы выполняем команду dba.configureInstance() на каждом узле кластера InnoDB, чтобы убедиться, что необходимые настройки 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.
    

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

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

Spec-Zone.ru

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