mysql 组复制(MGR)系列文章(一)之组复制简介

一、经典异步复制介绍

传统的MySQL复制提供了一种简单的从源到副本的复制方法。源是主要的,有一个或多个副本是次要的。源应用事务,提交事务,然后稍后(因此异步)将其发送到副本,以重新执行(基于语句的复制)或应用(基于行的复制)。这是一个无共享系统,默认情况下,所有服务器都有数据的完整副本。如下图所示

还有半同步复制,它为协议增加了一个同步步骤。这意味着主服务器在应用时等待次服务器确认已收到事务。只有到那时,主服务器才会恢复提交操作。如下图所示


二、组复制介绍

组复制是一种可用于实现容错系统的技术。复制组是一组服务器,每个服务器都有自己的完整数据副本(shared-nothing replication scheme),并通过消息传递相互交互。

MySQL Group Replication 组中的每个服务器都可以随时独立执行事务。但是,所有读写事务只有在组批准后才会提交。换句话说,对于任何读写事务,组都需要决定是否提交,因此提交操作不是源服务器的单方面决定。只读事务不需要在组内进行协调,并立即提交。

当读写事务准备在发起服务器上提交时,服务器会自动广播写值(已更改的行)和相应的写集(已更新行的唯一标识符)。因为事务是通过原子广播发送的,所以组中的所有服务器要么都接收到事务,要么都没有接收到。如果它们接收到了事务,那么它们都会按照与之前发送的其他事务相同的顺序接收它。因此,所有服务器都以相同的顺序接收相同的事务集,并为这些事务建立全局总顺序。

但是,在不同服务器上并发执行的事务之间可能存在冲突。在称为认证的过程中,通过检查和比较两个不同并发事务的写入集来检测此类冲突。在认证过程中,冲突检测是在行级别进行的:如果在不同服务器上执行的两个并发事务更新了同一行,则存在冲突。冲突解决过程规定,首先订购的事务在所有服务器上提交,然后订购的第二个事务中止,因此在发起服务器上回滚,并由组中的其他服务器丢弃。例如,如果t1和t2在不同的位置同时执行,都改变了同一行,并且t2的顺序在t1之前,那么t2赢得了冲突,t1被回滚。这实际上是一个分布式的首次提交获胜规则。

下图描述了MySQL组复制协议,通过将其与MySQL复制(甚至MySQL半同步复制)进行比较,您可以看到一些差异。为了清楚起见,这张图片中缺少了一些潜在的共识和与Paxos相关的信息。

posted @   有形无形  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示