mysql面试题

这个问题是 MySQL 面试里的核心高频题,你要答到点上其实就一句话:


🧠 一句话核心

👉 MySQL 主从复制是通过“二进制日志(binlog)+ relay log”实现的数据同步机制


⚙️ 一、核心原理(必须会讲)

MySQL 主从同步本质是:

👉 主库记录操作 → 从库重放操作


🔄 完整流程(面试重点)

1️⃣ 主库写 binlog

  • 所有数据变更(INSERT / UPDATE / DELETE)
  • 写入 binlog(二进制日志)

2️⃣ 从库 IO 线程拉取 binlog

从库有一个线程:

👉 IO Thread:

  • 连接主库
  • 拉取 binlog

3️⃣ 写入 relay log(中继日志)

  • 从库不会直接执行 binlog
  • 而是先写到本地:

👉 relay log


4️⃣ SQL 线程执行 relay log

从库另一个线程:

👉 SQL Thread:

  • 读取 relay log
  • 执行 SQL

📌 流程图(你可以口述这个)

1
主库(binlog) → 从库(IO线程) → relay log → SQL线程执行 → 数据同步

🧩 二、关键组件(必须说全)

组件 作用
binlog 主库记录所有变更
IO Thread 从库拉日志
relay log 从库中转日志
SQL Thread 执行同步

👉 能说出这4个,基本稳了


🔍 三、同步方式(面试很爱问)


1️⃣ 异步复制(默认)

👉 特点:

  • 主库不等从库
  • 性能高
  • 可能丢数据

2️⃣ 半同步复制

👉 特点:

  • 至少一个从库确认
  • 比较安全

3️⃣ 全同步复制(少见)

👉 特点:

  • 所有从库确认
  • 很慢

📦 四、binlog 三种格式(高频加分点)


1️⃣ STATEMENT(语句级)

1
UPDATE user SET age=18 WHERE id=1;

👉 问题:

  • 不安全(函数、时间)

2️⃣ ROW(推荐 ⭐)

👉 记录行变化

1
id=1 age:17 → 18

👉 优点:

  • 最安全

3️⃣ MIXED

👉 自动选择


⚠️ 五、常见问题(面试加分)


❓ 主从延迟原因?

👉 答:

  • 从库执行慢
  • 大事务
  • IO 瓶颈
  • 单线程 SQL 执行

❓ 如何解决延迟?

👉 答:

  • 开启多线程复制:
1
slave_parallel_workers
  • 优化 SQL
  • 提升硬件

🧠 六、再升一级(你这个水平建议说)


👉 本质总结:

MySQL 主从复制不是“同步数据”,而是“同步操作日志”。


👉 也就是说:

  • 主库:记录“做了什么”
  • 从库:再做一遍

🎯 面试标准答案(建议背)

👉

MySQL 主从复制是基于 binlog 实现的,主库将数据变更记录到 binlog,从库通过 IO 线程拉取 binlog 并写入 relay log,再由 SQL 线程执行,从而实现数据同步。


💬 给你一个实战补充(你很加分)

你可以顺带说一句:

👉
“我实际用过主从复制,在生产中主要关注主从延迟和 binlog 格式,一般使用 ROW 格式保证数据一致性。”


如果你想,我可以再帮你补一套:

👉 “主从复制 + 高可用(MHA / Orchestrator)”面试题
或者
👉 “为什么主从会不一致(经典坑点)”