主题切换
主从同步原理
一、核心基础
主从复制的核心是二进制日志(Binlog),它记录了主库的所有DDL(数据定义)和DML(数据操作)语句(不包含SELECT/SHOW等查询语句),是数据同步的源头。
二、完整同步流程
- 主库记录Binlog:事务提交时,主库将数据变更写入Binlog文件,并维护日志位置点。
- 从库拉取Binlog:从库的IO线程连接主库,拉取Binlog数据,写入本地的中继日志(Relay Log)。
- 从库重放日志:从库的SQL线程读取Relay Log,重放日志中的操作,同步到自身数据,并更新日志位置点。
三、关键组件与角色
- 主库(Master):负责处理写操作,生成Binlog。
- 从库(Slave):负责处理读操作,通过IO/SQL线程同步主库数据。
- Binlog:主库的二进制日志,数据同步的核心依据。
- Relay Log:从库的中继日志,中转Binlog数据,避免主库连接中断后重复拉取。
面试相关问题
问:请说一下MySQL主从同步的原理?答: MySQL主从同步的核心是二进制日志(Binlog),流程分为三步:主库在事务提交时,把数据变更记录在Binlog文件中;从库的IO线程读取主库的Binlog,写入本地的中继日志(Relay Log);从库的SQL线程重放Relay Log中的事件,将变更同步到自身数据。
问:主从同步中Binlog和Relay Log的作用是什么?答: Binlog是主库的二进制日志,记录所有DDL和DML操作,是数据同步的源头;Relay Log是从库的中继日志,用于中转Binlog数据,避免主库连接中断后重复拉取,同时保证数据重放的顺序性。
问:主从同步会有延迟吗?为什么?答: 会有延迟,主要原因:主库写入Binlog后,需要等待从库拉取和重放日志,存在网络传输和执行延迟;从库单线程重放日志,当主库写入压力大时,从库重放速度跟不上主库写入速度,导致延迟;大事务在主库提交后,从库需要完整重放事务,会产生较大延迟。
问:如何减少主从同步延迟?答: 优化主库写入性能,避免大事务;配置并行复制,让从库多线程重放日志;选择低延迟网络环境,减少传输耗时;调整从库参数,优化Relay Log和SQL线程的执行效率。