mysql面试题
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)”面试题
或者
👉 “为什么主从会不一致(经典坑点)”
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment


