什么是 MySQL 的主从同步机制?它是如何实现的?
MySQL 的主从同步机制是一种将主数据库(Master)上的数据实时或接近实时地同步到从数据库(Slave)的机制。通过这种机制,从数据库可以获取到主数据库的数据更新并进行复制,从而实现数据的冗余备份、负载均衡和高可用性。
主从同步机制的工作原理
主从同步的核心思想是,所有对主数据库的写操作都会记录到二进制日志(binlog)中,然后由从数据库通过读取这些日志来进行数据同步。主要涉及以下几个组件:
- 主库(Master):处理所有的写操作,并将这些操作记录到二进制日志(binlog)中。
- 从库(Slave):定期从主库获取二进制日志,应用日志中的更改,使其数据与主库保持一致。
主从同步的实现过程
-
配置主库(Master)
- 开启二进制日志:主库需要启用二进制日志(binlog),以便记录所有对数据库的写操作。
- 配置唯一的服务器 ID:每个 MySQL 服务器需要有一个唯一的 ID,以便识别。
-
配置从库(Slave)
- 设置从库连接到主库:在从库中配置主库的地址、端口和登录凭据,允许从库连接到主库。
- 启动复制线程:从库启动 I/O 线程,读取主库的二进制日志并将其存储到中继日志(relay log)中。
-
同步过程
- 主库的二进制日志(binlog):当主库执行任何写操作(INSERT、UPDATE、DELETE)时,都会将这些操作记录到 binlog 中。
- 从库的 I/O 线程:从库的 I/O 线程不断从主库读取 binlog,并将其写入到从库的中继日志(relay log)中。
- 从库的 SQL 线程:从库的 SQL 线程读取中继日志,并执行其中的 SQL 语句,以将主库的数据更新应用到从库中。
-
同步的延迟:由于从库是异步读取主库的 binlog 并执行 SQL,因此在大多数情况下,从库的数据会略微滞后于主库,这种延迟被称为“复制延迟”。
主从同步的工作流程
-
主库写操作:
- 主库执行写操作时,首先将操作记录到 binlog。
- binlog 会被按顺序写入到二进制日志文件中,供从库读取。
-
从库获取 binlog:
- 从库的 I/O 线程连接到主库,从主库读取二进制日志,并将日志存储到中继日志(relay log)中。
-
从库应用日志:
- 从库的 SQL 线程从中继日志中读取 SQL 语句并执行它们,从而将主库的更改应用到从库。
-
主库与从库同步:
- 主库的 binlog 中的每个事务都会被从库的 I/O 线程读取并处理,确保数据同步。
同步模式
-
异步复制(Asynchronous Replication):
- 在最常见的 MySQL 主从同步模式下,主库将数据写入 binlog 后,立即返回给客户端,不会等待从库确认。这个过程是异步的。
- 优点:主库和从库之间的同步延迟较低,性能较高。
- 缺点:主库发生故障时,从库的数据可能会丢失,导致数据不一致。
-
半同步复制(Semi-Synchronous Replication):
- 主库在写入 binlog 后,会等待至少一个从库确认接收到日志,才能返回客户端。
- 优点:相比异步复制,能减少数据丢失的风险。
- 缺点:会增加写操作的延迟。
-
同步复制(Synchronous Replication):
- 所有的主从服务器都必须同步提交事务,主库和所有从库都成功接收到日志并确认之后,才会向客户端返回操作结果。MySQL 从 5.7 版本开始支持同步复制。
- 优点:可以确保所有数据库节点的严格一致性。
- 缺点:性能较低,主库和从库之间的延迟会增加。
主从同步的优缺点
-
优点:
- 数据冗余:从库可作为主库的备份,保证数据安全。
- 读写分离:通过主从同步,读请求可以分发到从库上,减轻主库的负担,提高查询性能。
- 高可用性:如果主库发生故障,可以手动或自动将从库提升为主库,保证系统的可用性。
-
缺点:
- 延迟:主库和从库之间存在一定的延迟,可能导致从库的数据与主库不一致。
- 写操作压力:如果写操作集中在主库,可能会导致性能瓶颈。
总结
MySQL 的主从同步机制通过主库记录写操作到 binlog,并通过从库的 I/O 线程和 SQL 线程将数据同步到从库,实现数据的冗余备份和负载均衡。通过异步、半同步或同步复制等不同的同步模式,用户可以根据实际需求在性能和数据一致性之间进行权衡。
标签:主库,binlog,同步,MySQL,日志,从库,主从 From: https://www.cnblogs.com/eiffelzero/p/18607988