如果需要使用 AdminAPI 监控、管理、配置 InnoDB 集群,首先需要连接到集群某台成员服务器,获取 InnoDB 集群对象。
mysqlsh
\connect
cluster@master-01:3306
var cluster = dba.getCluster('testCluster')
后续可以通过该对象查看InnoDB集群拓扑
1查看集群拓扑
使用 describe()方法査看 InnoDB 集群拓扑。
cluster.describe()
{
#集群名
"clusterName": "testCluster",
#集群使用Group Replication 的信息
"defaultReplicaSet":{
"name": "default",
# Group Replication 拓扑,可见由三台服务器组成
"topology". [
{
"address": "master-01:3306",
"label":
"master-01:3306",
"role":
"HA"
}
{
"address":
"master-02:3306",
"label":
"master-02:3306",
"role": "HA"
}
{
"address":
"master-03:3306",
"label":
"master-03:3306",
"role": "HA"
}
],
#
Group Replication 工作模式,可见这是单主模式集群
"topologyMode":"Single-Primary"
}
}
2查看集群状态
使用status()方法查看InnoDB 集群状态,此方法也可看到集群的拓扑。
cluster.status()
{
# 集群名.
"clusterName": "testCluster",
# 集群使用 Group Replication 的信息,可见主服务是master-01,使用SSL 连接,状态正常,并且提示状态信息为:允许一台服务器离线:
"defaultReplicaSet": {
"name": “default",
"primary": "master-01:3306",
"ssl": "REQUIRED",
"status": "OK",
"statusText": "Cluster is ONLINE and can tolerate up
to ONE failure.",.
#Group
Replication 拓扑,可见由三台服务器组成,每台成员服务器的当前状态
"topology": {
"master-01:3306": {
"address": "master-01:3306",
"memberRole": "PRIMARY",
"mode": "R/W",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.26"
},
"master-02:3306":
{
"address": "master-02:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.26"
},
"master-03:3306":
{
"address": "master-03:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"replicationLag": null,
"role": "HA",
"status": "ONLINE",
"version": "8.0.26"
}
},
"topologyMode":
"Single-Primary"
},
# Group
Replication 工作模式,可见这是单主模式集群,主服务器是 master-01
"groupInformationSourceMember":"master-01:3306"
}
status()方法可指定 extended 选项(值 1,2,3)查看集群的扩展状态,值越大显式的状态值越多。
cluster.status({'extended':1})
cluster.status({'extended':2})
cluster.status({'extended':3})
3监视 Recovery操作
当集群新增成员服务器在进行分布式恢复操作时,status()中的Recovery 部分可以看到Clone 操作或异步恢复的情况。
cluster.status()
为简洁起见,对示例 status()输出进行了裁剪:
…
"recovery":
{
# Clone 开始的时间戳
"cloneStartTime": "2019-07-15 12:50:22.730"
# Clone 操作当前状态.
"cloneState": "In Progress",
"currentStage": "FILE COPY",
#
Clone 操作当前完成比例
"currentStageProgress":61.726837675213865,
# Clone 操作当前阶段状态
"currentStageState": "in Progress"
},
#正在进行克隆“Cloning in progress”,异步恢复“Distributed recovery in progress”
"recoveryStatusText":
"Cloning in progress",
…
使用 extended为1或更大值,可以显示更详细分布式恢复信息。
·4重新扫描集群
此功能重新扫描集群以查找新加入的,以及已经“过时”的实例。当更改拓扑模式(即:单主模式,多主模式)后也可以重新扫描集群。
如果集群为 8.0.11 及以上版本,使用rescan()方法重新扫描,检测不属于集群的实例,显示为 newlyDiscoveredlnstance 对象。
例如:在运行版本8.0.16的实例上扫描:
cluster.rescan()
"newlyDiscoveredInstances": [
{
"host":
"ic-4:3306",
"member_id":“82a67a06-2ba3-11e9-8cfc-3c6aa7197deb",
"name": null,
"version": "8.0.16"
}
]
📌 1. MGR
日常巡检脚本建议包括:
|
巡检目标 |
建议命令 |
|
集群成员状态 |
SELECT * FROM
performance_schema.replication_group_members; |
|
成员统计指标 |
SELECT * FROM
performance_schema.replication_group_member_stats\G |
|
当前主节点信息 |
SHOW STATUS LIKE
'group_replication_primary_member'; |
|
GR线程状态 |
SHOW PROCESSLIST;(或 SELECT * FROM
performance_schema.processlist WHERE user='system user';) |
|
复制一致性配置 |
SHOW VARIABLES LIKE
'group_replication_consistency'; |
|
踢出超时设置 |
SHOW VARIABLES LIKE
'group_replication_member_expel_timeout'; |
|
异常日志检查 |
SHOW WARNINGS;、SHOW ERRORS;、查看 error log |
|
节点间连通性 |
可结合 ping 或 telnet 端口、SELECT @@hostname; |
可以包装成一个 SQL 文件定时巡检运行,也可以基于 Shell 脚本 + mysqlsh 自动输出报告。
📌 2. 问题节点踢出与重新加入操作流程(MySQL Shell 版)建议包括:
🌐 适用于节点状态为 UNREACHABLE, ERROR, RECOVERING 时:
- Step 1:确认节点确实不可达(或确实故障)
SELECT MEMBER_HOST, MEMBER_STATE FROM
performance_schema.replication_group_members;
- Step 2:查看是否自动被驱逐或手动驱逐(检查 group_replication_member_expel_timeout 是否过短)
- Step 3:手动从集群移除节点(如果未自动踢出)
var cluster = dba.getCluster();
cluster.forceQuorumUsingPartitionOf('uuid主机(正常的主机)');
cluster.removeInstance('故障主机:端口');
- Step 4:确认该节点服务启动正常,MySQL能访问、配置无误后重新加入
dba.configureInstance('节点:端口', {clusterAdmin: 'root', password: 'xxx', ...});
cluster.rejoinInstance('节点:端口');
- Step 5:确认状态恢复为 ONLINE
SELECT * FROM performance_schema.replication_group_members;




