跳至主要內容

MySQL主从复制的过程

fangzhipeng约 906 字大约 3 分钟

MySQL主从复制的过程

Mysql主从同步的流程,其基本流程包括以下几个步骤:

image-20240304224117881
image-20240304224117881
  1. 建立复制关系

    • 首先,在从库上启动从库的复制进程,生成两个线程,一个 I/O 线程,一个 SQL 线程。
  2. 主库记录二进制日志

    • 在主库上,所有的数据变更操作(如INSERT、UPDATE、DELETE)都会被记录在二进制日志(Binary Log)中。这些日志包含了对数据的修改操作,但不包含查询操作,用于实现数据的复制和同步。
  3. 从库连接主库

    • 从库I/O 线程在建立复制关系后,会连接到主库并请求复制主库的二进制日志。从库通过主库的 log dump 线程的日志文件名和位置,确定自己的复制位置(Relay Log)。
  4. 数据复制与重放

    • 主库将数据变更记录复制到从库的Relay Log中。从库接收到主库的数据变更后会进行解析和重放,即执行相同的数据变更操作,以保持主从数据的一致性。

从库不断地从主库复制二进制日志,并将这些数据变更应用到自己的数据集中,保证主从数据的同步。从库可以根据需要设定不同的同步模式(如异步复制、半同步复制、全同步复制)来控制数据的传输和应用速度。

扩展阅读

主从复制的一致性是怎么保证的?

MySQL主从复制通过一些机制来确保主库和从库之间的数据一致性:

  1. 基于二进制日志的复制
    • 主库将所有数据修改操作(INSERT、UPDATE、DELETE等)写入二进制日志(Binlog)。从库通过读取和解析主库的Binlog来获取数据变更操作,并在从库上重放执行这些操作,从而保证数据的一致性。
  2. 事务复制
    • MySQL主从复制保证了事务的原子性,即事务中的所有数据修改操作要么全部被执行,要么全部回滚。从库在重放主库的Binlog时,会尽量按照事务的顺序进行,确保相同事务的数据变更操作在从库上的执行顺序与主库一致。
  3. 同步模式和延迟
    • MySQL提供了不同的同步模式(异步复制、半同步复制、全同步复制),并可以通过配置来调整同步延迟的程度。
  4. 主从状态监控
    • MySQL提供了监控主从复制状态的工具和命令。通过监控可以获得主从同步的状态信息,如延迟时间、同步进度等,及时发现和处理主从同步的不一致或延迟问题。

什么是binlog?

Binlog(二进制日志)是MySQL数据库的一种日志文件,用于记录对数据库的修改操作,如INSERT、UPDATE和DELETE等。Binlog记录了所有的数据更改操作,不包含查询操作。Binlog是MySQL数据库复制(replication)和恢复的关键组成部分。

Binlog有三种格式:

  • statement格式:binlog记录的是实际执行的sql语句
  • row格式:binlog记录的是变化前后的数据(涉及所有列),形如update table_a set col1=value1, col2=value2 ... where col1=condition1 and col2=condition2 ...
  • mixed格式:默认选择statement格式,只在需要时改用row格式
方志朋_官方公众号
方志朋_官方公众号