MySQL主从复制的过程
约 906 字大约 3 分钟
MySQL主从复制的过程
Mysql主从同步的流程,其基本流程包括以下几个步骤:
建立复制关系:
- 首先,在从库上启动从库的复制进程,生成两个线程,一个 I/O 线程,一个 SQL 线程。
主库记录二进制日志:
- 在主库上,所有的数据变更操作(如INSERT、UPDATE、DELETE)都会被记录在二进制日志(Binary Log)中。这些日志包含了对数据的修改操作,但不包含查询操作,用于实现数据的复制和同步。
从库连接主库:
- 从库I/O 线程在建立复制关系后,会连接到主库并请求复制主库的二进制日志。从库通过主库的 log dump 线程的日志文件名和位置,确定自己的复制位置(Relay Log)。
数据复制与重放:
- 主库将数据变更记录复制到从库的Relay Log中。从库接收到主库的数据变更后会进行解析和重放,即执行相同的数据变更操作,以保持主从数据的一致性。
从库不断地从主库复制二进制日志,并将这些数据变更应用到自己的数据集中,保证主从数据的同步。从库可以根据需要设定不同的同步模式(如异步复制、半同步复制、全同步复制)来控制数据的传输和应用速度。
扩展阅读
主从复制的一致性是怎么保证的?
MySQL主从复制通过一些机制来确保主库和从库之间的数据一致性:
- 基于二进制日志的复制:
- 主库将所有数据修改操作(INSERT、UPDATE、DELETE等)写入二进制日志(Binlog)。从库通过读取和解析主库的Binlog来获取数据变更操作,并在从库上重放执行这些操作,从而保证数据的一致性。
- 事务复制:
- MySQL主从复制保证了事务的原子性,即事务中的所有数据修改操作要么全部被执行,要么全部回滚。从库在重放主库的Binlog时,会尽量按照事务的顺序进行,确保相同事务的数据变更操作在从库上的执行顺序与主库一致。
- 同步模式和延迟:
- MySQL提供了不同的同步模式(异步复制、半同步复制、全同步复制),并可以通过配置来调整同步延迟的程度。
- 主从状态监控:
- 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格式