简介:在高并发数据库场景中,主从复制延迟一直是影响系统可用性和数据一致性的关键问题。在 MySQL 5.6 之前,仅支持单线程复制,导致从库无法跟上主库的写入速度。为解决这一瓶颈,MySQL 引入了**并行复制(Parallel Replication)**技术,通过多线程机制大幅提升从库的回放能力
在 MySQL 5.6 版本之前,从库仅支持单线程复制(Single-threaded Replication),即一个 SQL 线程(sql_thread)串行地读取并执行中继日志(relay log)中的事务。当主库并发写入压力大、TPS 高时,从库往往无法及时消费日志,造成严重的主从延迟(Replication Lag)
为解决这一瓶颈,MySQL 引入了并行复制(Parallel Replication)机制。其核心思想是将原本单一的 sql_thread 拆分为一个协调线程(Coordinator)和多个工作线程(Worker),形成典型的 Coordinator -> 多个 Worker 架构:
slave_parallel_workers
控制。通过多 Worker 并行执行,从库的事务回放能力显著提升,有效缓解主从延迟问题。
尽管实现方式多样,所有并行复制策略都必须遵守两个核心原则,以确保数据一致性与事务隔离性:
违反上述任一原则,都将导致从库数据与主库不一致。
1. 按表分发
该策略对应 MySQL 5.7 中 slave_parallel_type = DATABASE。
2. 按行分发
ROW
。早期按行复制为实验性功能,MySQL8.0 的 WRITESET 是其增强版。
3. 基于组提交的并行复制
在 sync_binlog=1
和 innodb_flush_log_at_trx_commit=1
(双一配置)下,为减少磁盘 I/O,MySQL 将多个事务的 fsync
操作合并为一组执行,称为组提交(Group Commit)。
组内事务具有以下特性:
MySQL 在 binlog 中引入两个关键字段:
sequence_number
:事务提交的全局唯一递增序号。last_committed
:表示该事务提交时,上一组事务的最大 sequence_number
。判断依据:last_committed 相同的事务属于同一组,可在从库并行回放。
commit_id
标识事务组,相同 commit_id
的事务可并行执行。slave_parallel_type = LOGICAL_CLOCK
commit
阶段的组提交,还利用 prepare
阶段的并行性。prepare
阶段,即表示已通过锁冲突检测,可与其他处于 prepare
或 commit
阶段的事务并行执行。可通过 binlog_group_commit_sync_delay 和 binlog_group_commit_sync_no_delay_count 调整组提交策略,提升并行效果。
4. MySQL 8.0 的 WRITESET 并行复制
MySQL 8.0 引入更智能的并行策略,由参数 binlog_transaction_dependency_tracking
控制:
策略 | 说明 |
---|---|
COMMIT_ORDER | 等同于 5.7 的 LOGICAL_CLOCK,基于 prepare/commit 阶段判断并行性。 |
WRITESET | 计算事务修改每一行的 hash 值,组成 writeset 。若两事务 writeset 无交集,则可并行。 |
WRITESET_SESSION | 在 WRITESET 基础上增加会话顺序约束:同一 session 的事务在从库保持原有顺序。 |
四、总结与选型建议
策略 | 适用场景 | 并行度 | 注意事项 |
---|---|---|---|
按库/表 | 多库多表,负载均衡 | 中 | 热点表退化 |
按行 | 热点表,高并发 | 高 | 需主键,CPU开销大 |
LOGICAL_CLOCK | 通用,推荐 5.7 | 高 | 需合理配置组提交参数 |
WRITESET | 高并发,复杂负载 | 极高 | 需主键,8.0+ 推荐 |
最佳实践建议:
MySQL 5.7:启用 slave_parallel_type=LOGICAL_CLOCK,并调整 binlog_group_commit_sync_delay。
MySQL 8.0:优先使用 binlog_transaction_dependency_tracking=WRITESET,确保表有主键。
五、结语
并行复制是 MySQL 高可用架构中的关键技术。从早期的按表分发,到基于组提交的 LOGICAL_CLOCK,再到 MySQL 8.0 的 WRITESET,复制并行度不断提升,逐步逼近“主库并发度在从库重现”的理想目标。
合理选择并行策略,结合业务特点优化配置,不仅能显著降低主从延迟,还能提升系统整体吞吐量与稳定性。掌握这些原理,是每一位 DBA 和后端工程师的必备技能。
有遗漏或者不对的可以在我的公众号留言哦