MySQL 主从同步机制详解
什么是 MySQL 主从同步?
MySQL 的主从同步机制是一种数据复制技术,用于将主数据库(Master)上的数据同步到一个或多个从数据库(Slave)中。这种机制主要解决了数据库的高可用性、读写分离、负载均衡和数据备份等问题。
主从同步的实现原理
MySQL 主从同步主要通过 二进制日志(Binary Log,简称 binlog) 实现数据的复制。具体流程如下:
主库操作:
主库接受事务请求并执行数据更新
将变更操作记录到 binlog 中
通过 binlog dump 线程将变更事件推送给从库
从库操作:
I/O 线程接收主库的 binlog 变更事件并写入 relay log(中继日志)
SQL 线程从 relay log 中读取事件并重放执行,更新从库数据
一句话概括:主库提交事务会写 binlog,由 dump 线程监听 binlog 变更并推送更新事件给从库,从库通过 I/O 线程写入 relay log,再由 SQL 线程重放更新数据。
主从复制的三种类型
1. 异步复制(默认模式)
特点:
主库不需要等待从库的响应
性能最高,但数据一致性最低
有数据丢失风险(如主库在数据未同步到从库时宕机)
流程:
主库接受事务请求
更新数据并写入 binlog
立即给客户端响应
异步推送 binlog 变更到从库
2. 同步复制
特点:
主库需要等待所有从库确认收到数据
数据一致性最高,但性能最差
实际生产环境很少使用
3. 半同步复制(MySQL 5.7+)
特点:
主库等待至少一个从库确认收到数据
性能和一致性达到较好平衡
可配置参数控制需要确认的从库数量
并行复制技术
为了解决从库单线程复制导致的延迟问题,MySQL 引入了并行复制技术:
1. MySQL 5.6 基于库级别的并行复制
不同数据库的事务可以并行执行
局限性:单数据库负载高时效果有限
2. MySQL 5.7 基于组提交的并行复制
同一组提交的事务可以并行执行
引入了两个重要参数:
binlog_group_commit_sync_delay:组提交等待延迟
binlog_group_commit_sync_no_delay_count:最大事务数量
3. MySQL 8.0 基于 WriteSet 的并行复制
通过分析事务修改的数据行判断冲突
无冲突的事务可以并行执行
不依赖主库的事务提交方式,效率更高
总结
MySQL 主从同步机制通过 binlog 实现了数据的复制,提供了异步、同步和半同步三种复制方式以满足不同场景需求。随着版本演进,MySQL 不断优化并行复制技术,从库级别的并行发展到行级别的并行,显著提高了复制效率和降低了主从延迟。在实际应用中,需要根据业务对数据一致性和性能的要求,选择合适的复制方式和配置参数。
作者:超爱吃士力架
链接:https://juejin.cn