本节介绍升级过程中的故障排除。
MySQL Shell 使用提供的连接参数的主机值作为目标主机名用于 AdminAPI 操作,即在元数据中注册实例(用于dba.createCluster()
和
操作)。但是,用于连接参数的实际主机可能与
Cluster
.addInstance()hostname
Group Replication 使用或报告的主机不匹配,report_host
它在定义时使用系统变量的值(换句话说它不是
NULL
),否则使用的
hostname
值. 因此,AdminAPI 现在遵循相同的逻辑在元数据中注册目标实例并将其作为默认值
group_replication_local_address
实例上的变量,而不是使用实例连接参数中的主机值。当
report_host
变量设置为空时,Group Replication 对主机使用空值,但 AdminAPI(例如在诸如dba.checkInstanceConfiguration()
,
dba.configureInstance()
,
等命令dba.createCluster()
中)将主机名报告为使用的值,这与 Group Replication 报告的值不一致. 如果为系统变量设置了空值
report_host
,则会产生错误。(缺陷号 28285389)
对于使用 8.0.16 之前的 MySQL Shell 版本创建的集群,尝试从使用 8.0.16 或更高版本执行的完全中断中重启集群会导致此错误。这是由元数据值与实例报告的report_host
或值不匹配造成的。hostname
解决方法是:
确定哪个实例是 “种子”,换句话说,具有最新 GTID 集的实例。该
dba.rebootClusterFromCompleteOutage()
操作检测实例是否为种子,如果当前会话未连接到最新实例,则该操作会产生错误。-
将
report_host
系统变量设置为存储在目标实例的元数据架构中的值。该值是hostname:port
集群创建时在实例定义中使用的对。可以通过查询mysql_innodb_cluster_metadata.instances
表来查询该值。例如,假设集群是使用以下命令序列创建的:
mysql-js> \c clusterAdmin@localhost:3306 mysql-js> dba.createCluster("myCluster")
因此,元数据中存储的主机名值为 “ localhost ”,因此
report_host
必须在种子上 设置为“ localhost ” 。 仅使用种子实例重启集群。在交互式提示下,不要将剩余的实例添加到集群中。
用于
将其他实例添加回集群。Cluster
.rescan()从集群中移除种子实例
在种子实例上停止 mysqld 并删除强制
report_host
设置(步骤 2),或将其替换为先前存储在元数据值中的值。重新启动种子实例并将其添加回集群使用
Cluster
.addInstance()
这允许集群顺利和完整地升级到最新的 MySQL Shell 版本。另一种可能性,取决于用例,是简单地设置
report_host
所有集群成员的值,以匹配集群创建时在元数据模式中注册的内容。