MST
星途 面试题库

面试题:MySQL 同步复制机制中的主从复制原理

请详细阐述 MySQL 主从复制机制的工作原理,包括涉及到的关键线程、日志以及数据同步的具体流程。
21.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 关键线程

  • 主库(Master)
    • Binlog Dump 线程:当从库连接主库时,主库会为每个连接的从库创建一个 Binlog Dump 线程。该线程负责读取主库的二进制日志(Binlog),并将其发送给从库。
  • 从库(Slave)
    • I/O 线程:负责与主库建立连接,向主库发送请求,请求获取主库的二进制日志。从主库的 Binlog Dump 线程接收二进制日志,并将其写入到从库的中继日志(Relay Log)中。
    • SQL 线程:从库的 SQL 线程负责读取中继日志中的事件,并按照顺序在从库上执行这些事件,从而使从库的数据与主库保持一致。

2. 关键日志

  • 二进制日志(Binlog)
    • 记录内容:主库上所有修改数据的操作都会记录到二进制日志中,如 INSERTUPDATEDELETE 等语句,以及一些可能会影响数据的 DDL 语句(如 CREATE TABLEALTER TABLE 等)。
    • 作用:用于主从复制时主库向从库传输数据修改信息,同时也用于数据库的恢复(如基于时间点恢复 PITR)。
  • 中继日志(Relay Log)
    • 记录内容:从库的 I/O 线程从主库获取的二进制日志内容会被写入中继日志。它包含了主库上数据修改的事件记录。
    • 作用:作为从库 SQL 线程执行数据同步的数据源,SQL 线程按顺序读取中继日志并执行其中的事件,使从库数据与主库同步。

3. 数据同步具体流程

  1. 配置主从关系
    • 在主库配置文件(如 my.cnf)中开启二进制日志功能,设置 server - id(一个唯一的标识,整个复制拓扑中每个节点的 server - id 都不同)等相关参数。
    • 在从库配置文件中同样设置唯一的 server - id 等参数。然后在从库上使用 CHANGE MASTER TO 语句指定主库的地址、端口、复制用户及密码,以及主库二进制日志文件名和位置(这些信息可通过在主库执行 SHOW MASTER STATUS 获得)。
  2. 建立连接
    • 从库启动 I/O 线程,该线程根据配置连接到主库。主库为这个连接创建一个 Binlog Dump 线程。
  3. 主库发送 Binlog
    • 主库的 Binlog Dump 线程开始读取主库的二进制日志,并将其发送给从库的 I/O 线程。
  4. 从库接收并写入 Relay Log
    • 从库的 I/O 线程接收主库发送的二进制日志内容,并将其写入到中继日志中。同时,I/O 线程会记录当前读取到主库二进制日志的位置(Master_Log_File 和 Read_Master_Log_Pos),这些信息记录在从库的 relay - log.info 文件中。
  5. 从库执行 Relay Log
    • 从库的 SQL 线程读取中继日志中的事件,并在从库上按顺序执行这些事件。SQL 线程也会记录自己执行到中继日志的位置(Relay_Log_File 和 Relay_Log_Pos),这些信息记录在从库的 relay - log.info 文件中。通过不断重复上述步骤,主库的数据修改会持续同步到从库,保持主从数据的一致性。