MST

星途 面试题库

面试题:MySQL复制机制中主从复制的基本原理是什么

请详细阐述MySQL主从复制过程中涉及的关键组件及其交互方式,以及数据是如何从主库传递到从库并保持一致性的。
45.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

关键组件

  1. 主库(Master):负责处理客户端的写操作,并将写操作记录到二进制日志(Binary Log,也叫 binlog)中。
  2. 从库(Slave):包含两个线程,I/O 线程和 SQL 线程。I/O 线程负责从主库拉取二进制日志并写入到中继日志(Relay Log),SQL 线程负责读取中继日志并在从库上重放这些日志以更新数据。
  3. 二进制日志(Binlog):记录主库上执行的写操作,如 INSERT、UPDATE、DELETE 等语句,它是主从复制的基础数据来源。
  4. 中继日志(Relay Log):从库的 I/O 线程将主库的二进制日志内容写入到中继日志,作为 SQL 线程重放的依据。

交互方式

  1. 建立连接:从库通过 CHANGE MASTER TO 语句配置主库的连接信息,如主库的 IP 地址、端口、用户名、密码以及主库二进制日志文件名和位置等。然后执行 START SLAVE 命令启动复制。
  2. 主库写操作记录:当主库上执行写操作时,会将相关操作记录到二进制日志中。
  3. 从库 I/O 线程拉取日志:从库的 I/O 线程与主库建立连接,请求主库发送二进制日志内容。主库接收到请求后,根据从库传递的日志位置信息,从该位置开始发送二进制日志给从库的 I/O 线程。I/O 线程将接收到的日志内容写入到中继日志中,并记录当前中继日志的位置信息。
  4. 从库 SQL 线程重放日志:从库的 SQL 线程读取中继日志中的内容,并按照日志记录的顺序在从库上执行相应的写操作,从而使从库的数据与主库保持一致。同时,SQL 线程也会记录当前重放的中继日志位置。

数据一致性保持

  1. 基于日志顺序:主库按照写操作的先后顺序记录二进制日志,从库的 I/O 线程和 SQL 线程分别按照顺序拉取和重放日志,保证了主从库上数据修改的顺序一致性。
  2. 位点追踪:主库通过记录二进制日志的文件名和位置信息,从库的 I/O 线程和 SQL 线程分别记录拉取和重放的日志位置。如果复制过程中出现中断,从库可以根据记录的位置信息,重新请求主库从上次中断的位置继续发送二进制日志,确保数据不会丢失或重复应用,从而维持数据一致性。
  3. 半同步复制(可选):在默认的异步复制基础上,半同步复制要求主库在至少有一个从库接收到并写入中继日志后,才会向客户端返回写操作成功的响应。这样可以降低在主库故障时数据丢失的风险,进一步保证数据一致性。