面试题答案
一键面试基本原理
MySQL 主从复制是将主数据库的 DDL 和 DML 操作通过二进制日志(Binary Log)传输到从数据库,从数据库再将这些日志重放,从而实现数据同步。
涉及的线程
- 主库 - Binlog Dump Thread:当从库连接主库时,主库会为该从库创建一个 Binlog Dump Thread。它负责读取主库二进制日志,并将其发送给从库。
- 从库 - I/O Thread:从库的 I/O Thread 连接到主库,请求主库发送二进制日志内容。接收到主库发送的日志后,将其写入到从库的中继日志(Relay Log)中。
- 从库 - SQL Thread:从库的 SQL Thread 读取中继日志中的内容,按照日志记录的操作顺序在从库上重新执行,从而使从库的数据与主库保持一致。
涉及的日志
- 二进制日志(Binary Log):记录主库上所有的 DDL 和 DML 操作(除了数据查询语句)。它是主从复制中数据传输的基础,主库通过发送二进制日志内容给从库来实现数据同步。
- 中继日志(Relay Log):从库的 I/O Thread 接收到主库发送的二进制日志内容后,将其写入到中继日志中。SQL Thread 从中继日志读取并执行日志中的操作。
数据同步流程
- 主库记录二进制日志:主库在执行数据修改操作(如 INSERT、UPDATE、DELETE 等)时,会将这些操作记录到二进制日志中。
- 从库连接主库:从库配置好主库的连接信息(如主库 IP、端口、用户名、密码等)后,从库的 I/O Thread 主动连接到主库。
- 主库发送二进制日志:主库的 Binlog Dump Thread 开始读取二进制日志,并将其发送给从库的 I/O Thread。
- 从库写入中继日志:从库的 I/O Thread 接收到主库发送的二进制日志内容后,将其写入到本地的中继日志中。
- 从库重放中继日志:从库的 SQL Thread 不断检查中继日志,一旦发现有新的日志内容,就会按照日志记录的操作顺序在从库上重新执行,从而使从库的数据与主库保持一致。在执行完相应的中继日志内容后,SQL Thread 会更新从库的中继日志索引,记录已经执行到的位置。