什么是 MySQL 的主从同步机制?它是如何实现的?

386 阅读3分钟

MySQL 主从同步机制详解

什么是 MySQL 主从同步?

MySQL 的主从同步机制是一种数据复制技术,用于将主数据库(Master)上的数据同步到一个或多个从数据库(Slave)中。这种机制主要解决了数据库的高可用性、读写分离、负载均衡和数据备份等问题。

image.png

主从同步的实现原理

MySQL 主从同步主要通过 二进制日志(Binary Log,简称 binlog) 实现数据的复制。具体流程如下:

  1. 主库操作
    • 主库接受事务请求并执行数据更新
    • 将变更操作记录到 binlog 中
    • 通过 binlog dump 线程将变更事件推送给从库
  2. 从库操作
    • I/O 线程接收主库的 binlog 变更事件并写入 relay log(中继日志)
    • SQL 线程从 relay log 中读取事件并重放执行,更新从库数据 一句话概括:主库提交事务会写 binlog,由 dump 线程监听 binlog 变更并推送更新事件给从库,从库通过 I/O 线程写入 relay log,再由 SQL 线程重放更新数据。

主从复制的三种类型

1. 异步复制(默认模式)

特点

  • 主库不需要等待从库的响应
  • 性能最高,但数据一致性最低
  • 有数据丢失风险(如主库在数据未同步到从库时宕机)

流程

  1. 主库接受事务请求
  2. 更新数据并写入 binlog
  3. 立即给客户端响应
  4. 异步推送 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 不断优化并行复制技术,从库级别的并行发展到行级别的并行,显著提高了复制效率和降低了主从延迟。在实际应用中,需要根据业务对数据一致性和性能的要求,选择合适的复制方式和配置参数。