MySQL主从复制的工作流程是什么样的?

1 个回答

  • ketty
    不必太张扬,是花自然香。
    1. **主节点日志发送线程** 当主节点和从节点建立连接后,主服务器上会启动一个bin log dump线程,用于给从节点发送bin log日志。读取bin log日志时,会对日志文件加锁,读取完成后解锁。发送的信息包括当前的bin-log文件名和位置。 2. **从节点I/O线程** 从节点与主节点建立连接后会启动一个I/O线程,接收主节点发送过来的bin log日志内容,并保存在从节点的relay log文件中。保存成功后,从节点会给主节点回复ACK消息,表明接收成功。 3. **从节点SQL线程** 从节点还会启动一个SQL线程,读取relay log中的内容,将其解析成SQL语句,并在从节点上执行,保证数据的一致性。 ### 主从复制的用途 1. **读写分离** 主库用于写数据,从库用于读数据。这样可以在更新数据时减少锁冲突,提高读写效率。 2. **数据备份** 主库出现故障后,可以进行故障转移,让从库代替主库提供服务。 ### 实现原理 #### 主节点日志发送线程 - 主节点会启动一个bin log dump线程,用于向从节点发送bin log日志。 - 读取bin log日志时会加锁,读取完成后解锁。 #### 从节点I/O线程 - 从节点启动一个I/O线程,接收并保存主节点发送的bin log日志到relay log文件中。 - 保存成功后,I/O线程会回复ACK消息给主节点。 #### 从节点SQL线程 - 从节点同时启动一个SQL线程,读取relay log文件中的内容,解析成SQL并在从节点执行。 ![MySQL主从复制工作流程](https://images.codewd.com/a79ee91b833550d93caa974692a37735.png) ### 复制模式 1. **异步模式(默认)** 主节点不会主动推送bin log给从节点,也不关心从节点的同步情况。 2. **半同步模式(MySQL 5.5之后提供)** 主节点在发送bin log后,会等待至少一个从节点写入relay log并返回ACK信息后才提交事务。 3. **全同步模式** 主节点在收到所有从节点的ACK信息后才认为事务提交成功。 ### bin log格式 1. **Statement-based Replication (SBR)语句模式** 执行的SQL语句直接记录到bin log日志文件中。 - 优点:日志较小,易于分析。 - 缺点:某些情况下会导致数据不一致,如now()函数。 2. **Row-based Replication (RBR)数据行模式** 记录更新的数据行到bin log日志文件中。 - 优点:数据一致性高。 - 缺点:日志文件较大,无法直接解析出SQL语句。 3. **Mixed-format Replication (MBR)混合模式** 根据具体操作选择SBR或RBR模式记录日志。 - MySQL NDB cluster 7.3和7.4使用MBR模式。 ### 支持版本 - **MySQL 5.1.5之前**:binlog格式仅支持STATEMENT模式。 - **MySQL 5.1.5起**:开始支持ROW模式。 - **MySQL 5.1.8起**:开始支持MIXED模式。 - **MySQL 5.7.7之前**:binlog默认格式为STATEMENT。 - **MySQL 5.7.7及更高版本**:binlog默认格式为ROW。 ![bin log格式](https://images.codewd.com/fa5f3d64baf3ffbf3e80129dc4461891.png)
    编辑于 2024-02-05 04:10 •IP属地 美国
    举报
    评论
    收藏