要升级 InnoDB ReplicaSet 中的实例,请完成以下步骤
检查已安装二进制文件的版本
mysqlrouter --version: 检查已安装的 MySQL Router 版本。
mysqlsh --version: 检查已安装的 MySQL Shell 版本。
mysqld --version: 检查已安装的 MySQL 服务器版本。
要升级 MySQL Router,请完成以下步骤
-
停止 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)。
获取并安装 最新版本的 MySQL Router。
-
启动 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 来升级 MySQL Shell
获取并安装 最新版本的 MySQL Shell。
-
通过发出以下命令停止并退出 MySQL Shell
\q
-
从命令行重新启动 MySQL Shell,方法是发出以下命令
mysqlsh
-
-
要升级 InnoDB ReplicaSet,请将 MySQL Shell 的全局会话连接到您的 ReplicaSet,并使用
dba.upgradeMetadata()
操作将 ReplicaSet 的元数据升级到新的元数据。dba.upgradeMetadata()
函数将已安装的元数据模式的版本与此 Shell 支持的元数据模式的版本进行比较。如果已安装的元数据版本较低,则会启动升级过程。
元数据升级如果 ReplicaSet 已经使用最新版本,则元数据升级可能不会执行任何操作。
-
通过在升级主实例之前升级所有辅助实例来升级 MySQL 服务器。
升级 MySQL 服务器是可选的。服务器升级比升级 MySQL Shell 和 MySQL Router 的影响更大。此外,即使服务器没有升级,也应始终将 MySQL Shell 和 MySQL Router 保持在最新版本;这适用于 InnoDB 集群和 ReplicaSet。
-
通过发出以下命令之一停止 MySQL 服务器
-
如果 MySQL 服务器使用的是 systemd,请发出以下命令
systemctl stop mysqld
-
如果 MySQL 服务器使用的是 init.d,请发出以下命令
/etc/init.d/mysql stop
-
如果 MySQL 服务器使用的是 service,请发出以下命令
service mysql stop
-
如果您在 Microsoft Windows 上部署了 MySQL 服务器,请发出以下命令
mysqladmin -u root -p shutdown
-
获取并安装 最新版本的 MySQL 服务器。
-
通过发出以下命令之一启动 MySQL 服务器
-
如果 MySQL 服务器使用的是 systemd,请发出以下命令
systemctl start mysqld
-
如果 MySQL 服务器使用的是 init.d,请发出以下命令
/etc/init.d/mysql start
-
如果 MySQL 服务器使用的是 service,请发出以下命令
service mysql start
-
如果您在 Microsoft Windows 上部署了 MySQL 服务器,请发出以下命令
mysqld
-
-
升级完所有辅助实例后,升级主实例以完成升级过程。
InnoDB ReplicaSet 中没有自动主切换。您需要在升级主实例之前,将主实例设置为已升级的成员。
将已升级的辅助实例设置为主实例
<ReplicaSet>.setPrimaryInstance('<host>:<port>')
使用
<ReplicaSet>.setPrimaryInstance()
操作,可以安全地将 ReplicaSet 的主实例更改为另一个实例。当前主实例将降级为辅助实例并变为只读,而提升的实例将成为新的主实例并变为读写。所有其他辅助实例将更新为从新的主实例进行复制。您已针对 ReplicaSet 引导的 MySQL Router 实例会自动开始将读写客户端重定向到新的主实例。升级
旧
主实例。升级完成后,您可以使用<ReplicaSet>.setPrimaryInstance()
将此已升级的实例恢复为主实例。有关更多信息,请参见 第 9.7 节,“更改主实例”。
升级完 MySQL Router、MySQL Shell 和 MySQL 服务器后
-
通过发出
<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(
将配置您要用于 ReplicaSet 的每个实例。MySQL Shell 可以连接到实例,然后配置它,或者您可以传入instance
)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 ReplicaSet 的状态”。.