【MySQL Shell】9.11 升级 InnoDB ReplicaSet

要升级 InnoDB ReplicaSet 中的实例,请完成以下步骤:

  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
    

    或者在使用 systemd 的 Linux 系统上,通过执行以下命令停止 MySQL Router 服务:

    systemctl stop mysqlrouter.service
    

    否则,终止关联的 mysqlrouter 进程的进程 ID(PID)。

  2. 获取并安装 最新版本的 MySQL Router 。

  3. 启动 MySQL Router 。
    在 Unix 系统上,如果您使用了可选的 --directory 引导选项,则会在您选择的位置使用所有生成的目录和文件创建一个自包含的安装。这些文件包括 start.sh 。进入到该目录并执行以下命令:

    ./start.sh
    

    如果新路由器的路径已更改,则必须更新 start.sh shell脚本以反映路径。

    #!/bin/bash
    basedir=/tmp/myrouter
    ROUTER_PID=$basedir/mysqlrouter.pid
    /usr/bin/mysqlrouter -c $basedir/mysqlrouter.conf &
    disown %-
    

    如果您手动升级 MySQL Router ,而不是使用包管理,则可以更新 basedir= 。再次引导路由器也会重新生成 start.sh shell脚本。
    或者在使用 systemd 的 Linux 系统上,通过执行以下命令启动 MySQL Router 服务:

    systemctl start mysqlrouter.service
    

    在 Microsoft Windows 上,如果您使用了可选的 --directory 引导选项,则会在您选择的位置使用所有生成的目录和文件创建一个自包含的安装。这些文件包括 start.ps1 。进入到该目录并执行以下命令:

    .\start.ps1
    

    使用新的路由器二进制文件启动 MySQL Router 时,路由器的版本将升级:

    mysqlrouter --version
    

升级 MySQL Shell

通过安装新的二进制文件并停止和启动 MySQLShell 来升级 MySQL Shell :

  1. 获取并安装最新版本的 MySQL Shell 。

  2. 通过发出以下命令停止并退出 MySQL Shell:

    \q
    
  3. 通过执行以下命令,从命令行重新启动 MySQL Shell :

    mysqlsh
    
  4. 升级 InnoDB ReplicaSet 元数据
    要升级 InnoDB ReplicaSet ,请将 MySQL Shell 的全局会话连接到 ReplicaSet ,并使用 dba.upgradeMetadata() 操作将 ReplicaSet 的元数据升级为新的元数据。

    dba.upgradeMetadata() 函数将安装的元数据模式的版本与此 Shell 支持的元数据模式版本进行比较。如果安装的元数据版本较低,则启动升级过程。

    元数据升级
    如果 ReplicaSet 已使用最新版本,则元数据升级可能不起作用。

更新 MySQL Server

通过在升级主实例之前升级所有辅助实例来升级 MySQL Server 。

升级 MySQL Server 是可选的
升级 MySQL Server 是可选的。服务器升级可能会比升级 MySQL Shell 和 MySQL Router 产生更大的影响。此外,您应该始终保持 MySQL Shell 和 MySQL Router 的最新版本,即使 Server 不是;这对于 InnoDB Cluster 和 ReplicaSet 来说是正确的。

  1. 通过执行以下命令之一停止 MySQL Server :

    • 如果 MySQL Server 正在使用 systemd ,执行:
    systemctl stop mysqld
    
    • 如果 MySQL Server 正在使用 init.d ,执行:
    /etc/init.d/mysql stop
    
    • 如果 MySQL Server 正在使用 service ,执行:
    service mysql stop
    
    • 如果您在 Microsoft Windows 上部署了 MySQL Server ,执行:
    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
    
    • 如果您在 Microsoft Windows 上部署了 MySQL Server ,执行:
    mysqld
    
  4. 升级所有辅助实例后,升级主实例以完成升级过程。
    InnoDB ReplicaSet 不支持自动切换主实例。在升级主实例之前,需要将主实例设置为已升级的成员。
    将升级的辅助实例设置为主实例:

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

    使用 <ReplicaSet>.setPrimaryInstance() 操作可以安全地将 ReplicaSet 的主实例更改为另一个实例。当前主实例将降级为辅助实例并设置为只读,而升级的实例将成为新的主实例并设置成读写。所有其他次要实例都将更新为从新的主实例复制。针对 ReplicaSet 启动的 MySQL Router 实例会自动开始将读写客户端重定向到新的主服务器。
    升级旧的主实例。升级后,可以使用 <ReplicaSet>.setPrimaryInstance() 将此升级后的实例还原为主实例。有关详细信息,请参阅 第 9.6 节 “更改主实例”

升级后状态检查

升级 MySQL Router 、MySQL Shell 和 MySQL Server 后:
通过发出 <ReplicaSet>.status() 来检查 ReplicaSet 的状态。在以下示例中,<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) 配置要在 ReplicaSet 中使用的每个实例。MySQL Shell 可以连接到一个实例,然后对其进行配置,也可以传递一个实例名来配置一个特定的远程实例。有关更多信息,请参阅 第 6.2.4 节 “持久化设置”

以下示例显示了如果 PRIMARY 成员的 read_onlysuper_read_only 设置为 ON<ReplicaSet>.status() 的输出:

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 ReplicaSet 状态”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独上西楼影三人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值