MySQL-MGR(三)单主/多主模式切换
实验演示规划:(3台虚拟机,MySQL版本为8.0.25)
-
192.168.168.101 master1(简称1节点)
-
192.168.168.102 slave2 (简称2节点)
-
192.168.168.103 slave3 (简称3节点)
在 MGR 中,单主模式是只有一个主节点可以写,其余均为只读节点,且只读节点的 super read only 为打开状态,即使 root 用户依然无法写。多主模式则为全节点均可写。
01单主切多主
MGR 单切多使用的命令为:
select group_replication_switch_to_multi_primary_mode();
首先我们观察当前集群的模式和各个节点的读写模式:
select * from performance_schema.replication_group_members;
show variables like '%read_only%';
1节点:
2节点:
3节点:
可以看到,各个节点的读写模式是符合单主模式的。
接下来我们在任意节点执行切换语句,此处我们在节点 1 上执行。
select group_replication_switch_to_multi_primary_mode();
可以看到节点 1 因为一开始就是主节点,所以读写模式没有发生变化,但是节点 2 和节点 3 已经自动关闭了只读模式,所有节点都变成可写。
多主切单主
MRG 多主切单主有两条命令可以使用。
不指定主节点进行切换。
select group_replication_switch_to_single_primary_mode();
MGR 中多主切单主,如果不指定主,切换时遵循以下的规则,前提无延迟情况下,按照优先级先后顺序:
1.先检查集群内是否存在低版本的MySQL,如果所有成员都是 8.0.17 版本以上的,则按照补丁先后顺序排列,如果有成员是 8.0.17 版本以下或者 5.7版本 的,按发行版本的主要版本来排序,忽略补丁编号。
2.如果集群有任意一个低版本的MySQL,且支持 group_replication_member_weight 这个参数,则根据 group_replication_member_weight 这个权重参数来,group_replication_member_weight。
默认都是 50,权重越高优先级越高。
3.如果集群内有不支持 group_replication_member_weight 参数的MySQL,比如MySQL5.7,并且其中一个以上的成员具有最高的成员权重(或忽略了成员权重),则考虑的第三个因素是生成的服务器 UUID 的词典顺序,由 server_uuid 系统变量指定。
服务器 UUID 最低的成员被选为主服务器,这里实际上就是查询 performance_schema.replication_group_members 最靠前的且是活着的MEMBER_ID。
在节点 1 上执行非指定单主的切换 SQL:
可以看到选取了 server_uuid 靠前的节点1成为主节点。
接下来我们观察各个节点的读写情况:
1节点:
2节点:
3节点:
可以看到此时节点 1 作为主节点已经关闭了read only,其他节点都已经打开了只读。
03指定单主切换
因为随机切有很大的不确定性,这里还提供了指定主节点的切换命令:
select group_replication_set_as_primary("member_id");
这里的 member_id 就是 server_uuid,我们在节点 1 执行切换命令,选择2节点的member_id。
切换后,可以看到节点1打开了只读变成了从节点
节点2,关闭了只读,成为主节点:
节点3,不变:
文章引用自数据和云公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?