MySQL 118 题 · 8 周刷题排期

挂靠在半年工作规划的第 1-8 周(MySQL 基础与备份恢复、故障排查与性能优化)。题源是数据库面试题库总览里去重后的 MySQL 118 道,题号为原站编号。

每天要过的题和进度打勾,用 打卡版 更顺手——它会自动认出「今天」。

怎么用(不额外占时间)

时间 动作 时长
通勤/午休 读当天那几道题的题干,先自己想答案,别看考点 10 分钟
晚上 21:00 开工前 合上答案口述一遍,卡住的记进 issues-log.md 5 分钟
周六实操前 把本周卡住的 3-5 道重答一遍(这是唯一需要「复习」的环节) 10 分钟

为什么这样排:输入放碎片时间,输出放在动手之前。口述不出来的题,说明那个知识点还没长在身上,标红就行,不用当场背。

全 8 周总览

周 日期 主题 题数 每日
第1周 11.2-11.8 环境地基 + MySQL 单机 19 3-4 道
第2周 11.9-11.15 主从复制 12 2 道
第3周 11.16-11.22 备份与恢复 9 1-2 道
第4周 11.23-11.29 主从进阶 + 月度收口 11 1-2 道
第5周 11.30-12.6 观测能力:先能看见问题 10 1-2 道
第6周 12.7-12.13 SQL 优化:explain 是听诊器 23 3-4 道
第7周 12.14-12.20 故障演练一:可用性类 14 2-3 道
第8周 12.21-12.27 故障演练二 + 月度收口 20 3-4 道
合计 118

第1周(11.2-11.8)环境地基 + MySQL 单机

配套实验:Docker 起 MySQL 8.0;改一条数据,用 show binlog events 看到它

这 19 道是整条线的地基。答不出来没关系,做实验时回来对一遍答案骨架。

周一 11.2 4 道

  • #589 详细描述一条 SQL 语句在 MySQL 中的执行过程。 进阶
  • #2626 MySQL 的体系结构是怎样的?其主要组件的功能是什么? 进阶
  • #590 MySQL 的存储引擎有哪些?它们之间有什么区别? 进阶
  • #2629 MySQL 中 InnoDB 存储引擎与 MyISAM 存储引擎的区别是什么? 进阶

周二 11.3 3 道

  • #625 从 MySQL 获取数据,是从磁盘读取的吗?(buffer pool) 进阶
  • #2654 MySQL 中的 Buffer Pool 和 Query Cache 是如何影响数据库性能的? 进阶
  • #2665 如何在 MySQL 中调优 InnoDB Buffer Pool? 进阶

周三 11.4 3 道

  • #626 MySQL 的 Change Buffer 是什么?它有什么作用? 进阶
  • #627 MySQL 的 Doublewrite Buffer 是什么?它有什么作用? 基础
  • #628 MySQL 中的 Log Buffer 是什么?它有什么作用? 基础

周四 11.5 3 道

  • #2640 MySQL 的查询优化器如何选择执行计划? 进阶
  • #2637 MySQL 的分区表(Partition Table)是什么?它的结构是怎样的?有哪些优势? 进阶
  • #2643 MySQL 中的查询缓存是什么?如何配置查询缓存? 进阶

周五 11.6 3 道

  • #1477 相比于 Oracle,MySQL 的优势有哪些? 进阶
  • #11175 SQL 中 select、from、join、where、group by、having、order by、limit 的执行顺序是什么? 进阶
  • #106 MySQL 中的日志类型有哪些?binlog、redo log 和 undo log 的作用和区别是什么? 进阶

周六 11.7 3 道

  • #1534 什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL? 进阶
  • #9498 MySQL 事务的二阶段提交是什么? 进阶
  • #10385 MySQL 插入一条 SQL 语句,redo log 记录的是什么? 进阶

第2周(11.9-11.15)主从复制

配套实验:Docker 一主一从 → 升级 GTID → 故意造 3 个复制错误再修

复制就是「主库 binlog 的消费过程」,所以昨晚那 4 道日志题是这周的前置。

周一 11.9 2 道

  • #620 什么是 MySQL 的主从同步机制?它是如何实现的? 进阶
  • #2632 MySQL 的主从复制原理是什么?常见的复制类型有哪些? 进阶

周二 11.10 2 道

  • #618 如何在 MySQL 中避免单点故障? 进阶
  • #619 如何在 MySQL 中实现读写分离? 进阶

周三 11.11 2 道

  • #621 如何处理 MySQL 的主从同步延迟? 进阶
  • #2720 MySQL 中的半同步复制是如何工作的? 进阶

周四 11.12 2 道

  • #2717 MySQL 中的 GTID(Global Transaction ID)在数据复制中的作用是什么? 进阶
  • #12251 什么是数据全量同步和增量同步?它们各有什么优缺点? 基础

周五 11.13 2 道

  • #12255 什么是 CDC(Change Data Capture)?常见的 CDC 工具有哪些? 基础
  • #12256 什么是批量数据入库?相比单条插入有什么优势? 基础

周六 11.14 2 道

  • #12258 多线程并发同步数据时(数据库的数据同步到数仓中)需要注意什么问题? 基础
  • #12252 什么是游标 Cursor 分页?相比传统 LIMIT OFFSET 分页有什么优势? 基础

第3周(11.16-11.22)备份与恢复

配套实验:XtraBackup 全备→增备→恢复;删库演练 + binlog 补数据(PITR)

本周实验最重(一次完整删库恢复),所以题量压到 9 道。做演练时把这 9 道的答案骨架当检查清单用。

周一 11.16 2 道

  • #2608 在 MySQL 中如何执行数据库备份和恢复操作? 进阶
  • #2691 MySQL 中的备份和恢复策略是什么?包括物理备份和逻辑备份 进阶

周二 11.17 2 道

  • #2701 MySQL 中 mysqldump 和 mysqlpump 工具的区别是什么? 进阶
  • #2697 如何在 MySQL 中使用 Percona XtraBackup 工具进行热备份? 进阶

周三 11.18 2 道

  • #2694 MySQL 的 binlog 日志在数据恢复中的作用是什么? 深入
  • #2707 MySQL 中如何使用 mysqlbinlog 工具进行二进制日志恢复? 进阶

周四 11.19 1 道

  • #2704 如何在 MySQL 中配置和管理 GTID(Global Transaction ID)以实现数据恢复? 进阶

周五 11.20 1 道

  • #2700 如何在 MySQL 中进行数据库的灾难恢复? 进阶

周六 11.21 1 道

  • #2710 MySQL 中如何设置和管理备份策略以实现自动化备份? 进阶

第4周(11.23-11.29)主从进阶 + 月度收口

配套实验:一主两从;从库延迟排查;半同步;binlog 三种格式对比

高可用这几道只要求「说清架构和切换代价」,不要求你现在搭出来——第 9、10 周才动手。

周一 11.23 2 道

  • #2711 MySQL 的 MHA(Master High Availability)架构是什么?如何进行配置? 深入
  • #2727 MySQL 的 MHA 和 Group Replication 有什么区别? 进阶

周二 11.24 2 道

  • #2714 如何在 MySQL 中配置 Galera Cluster 以实现多主复制? 深入
  • #2722 如何在 MySQL 中实现多主复制? 深入

周三 11.25 2 道

  • #2724 如何在 MySQL 中配置和使用 ProxySQL 以实现高可用性? 进阶
  • #2730 MySQL 的 NDB Cluster 如何实现高可用性? 进阶

周四 11.26 2 道

  • #3179 如何实现数据库的不停服迁移? 进阶
  • #622 什么是分库分表?分库分表有哪些类型(或策略)? 基础

周五 11.27 2 道

  • #623 如果组长要求你主导项目中的分库分表,大致的实施流程是? 进阶
  • #2635 MySQL 中如何实现分库分表?常见的分库分表策略有哪些? 进阶

周六 11.28 1 道

  • #624 对数据库进行分库分表可能会引发哪些问题? 进阶

第5周(11.30-12.6)观测能力:先能看见问题

配套实验:慢日志 + performance_schema + sys 库 + Grafana 面板

5 道监控题正好对应你在搭的东西。周五装完 Prometheus 再回看 2648、2662 会有全新理解。

周一 11.30 2 道

  • #2651 如何在 MySQL 中配置和使用慢查询日志? 进阶
  • #2648 MySQL 的性能监控工具有哪些?比如 Performance Schema 和 InnoDB Monitor 的功能是什么? 进阶

周二 12.1 2 道

  • #2662 如何配置和使用 MySQL 的 Performance Schema? 进阶
  • #2657 如何在 MySQL 中使用 pt-query-digest 工具来分析查询性能? 进阶

周三 12.2 2 道

  • #2659 如何使用 MySQL 的 Event Scheduler 来定期执行优化任务? 进阶
  • #631 如何在 MySQL 中监控和优化慢 SQL? 进阶

周四 12.3 2 道

  • #616 MySQL 中如何进行 SQL 调优? 进阶
  • #4040 MySQL 数据库的性能优化方法有哪些? 进阶

周五 12.4 1 道

  • #2675 MySQL 中常见的 JOIN 优化策略有哪些? 进阶

周六 12.5 1 道

  • #629 为什么在 MySQL 中不推荐使用多表 JOIN? 进阶

第6周(12.7-12.13)SQL 优化:explain 是听诊器

配套实验:explain 逐字段精读;5 个真实慢 SQL 改造

本周题量最大(23 道),是整套题库里最值钱的一块——索引和执行计划几乎每场面试都问。

周一 12.7 4 道

  • #591 MySQL 的索引类型有哪些? 基础
  • #601 为什么 MySQL 选择使用 B+ 树作为索引结构? 进阶
  • #11623 为什么 MySQL 索引用的是 B+ 树而不是红黑树? 进阶
  • #600 请详细描述 MySQL 的 B+ 树中查询数据的全过程 深入

周二 12.8 4 道

  • #592 MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? 进阶
  • #593 MySQL 中的回表是什么? 进阶
  • #594 MySQL 索引的最左前缀匹配原则是什么? 基础
  • #595 MySQL 的覆盖索引是什么? 进阶

周三 12.9 4 道

  • #596 MySQL 的索引下推是什么? 进阶
  • #597 在 MySQL 中建索引时需要注意哪些事项? 基础
  • #598 MySQL 中使用索引一定有效吗?如何排查索引效果? 进阶
  • #599 MySQL 中的索引数量是否越多越好?为什么? 进阶

周四 12.10 4 道

  • #1479 在什么情况下,不推荐为数据库建立索引? 进阶
  • #2672 如何在 MySQL 中优化索引以提高查询性能? 进阶
  • #12132 MySQL 二级索引有 MVCC 快照吗? 进阶
  • #2689 MySQL 中的 Full-Text Search 索引如何优化全文检索? 进阶

周五 12.11 4 道

  • #612 如何使用 MySQL 的 EXPLAIN 语句进行查询分析? 进阶
  • #2680 如何在 MySQL 中使用 EXPLAIN ANALYZE 命令优化查询? 进阶
  • #1214 MySQL 中 LIMIT 100000000, 10 和 LIMIT 10 的执行速度是否相同? 基础
  • #630 MySQL 中如何解决深度分页的问题? 进阶

周六 12.12 3 道

  • #617 MySQL 中的数据排序是怎么实现的? 基础
  • #2683 MySQL 中的 Query Rewrite 插件是什么?如何使用它来优化查询? 进阶
  • #9499 MySQL 三层 B+ 树能存多少数据? 进阶

第7周(12.14-12.20)故障演练一:可用性类

配套实验:主库宕机切换;主从延迟;把时间线写成标准故障报告

这 13 道事务与锁,是为第 8 周的「锁等待堆积 / 死锁」故障做理论准备。周二的延迟故障演练,用 621 的骨架当排查清单。

周一 12.14 3 道

  • #602 MySQL 是如何实现事务的? 深入
  • #606 MySQL 中的事务隔离级别有哪些? 基础
  • #607 MySQL 默认的事务隔离级别是什么?为什么选择这个级别? 基础

周二 12.15 3 道

  • #608 数据库的脏读、不可重复读和幻读分别是什么? 进阶
  • #604 MySQL 中的 MVCC 是什么? 深入
  • #605 如果 MySQL 中没有 MVCC,会有什么影响? 深入

周三 12.16 2 道

  • #603 MySQL 中长事务可能会导致哪些问题? 进阶
  • #609 MySQL 中有哪些锁类型? 进阶

周四 12.17 2 道

  • #610 MySQL 的乐观锁和悲观锁是什么? 进阶
  • #611 MySQL 中如果发生死锁应该如何解决? 进阶

周五 12.18 2 道

  • #1535 你们生产环境的 MySQL 中使用了什么事务隔离级别?为什么? 进阶
  • #2686 如何在 MySQL 中避免和优化死锁问题? 进阶

周六 12.19 2 道

  • #2646 MySQL 中如何实现分布式事务? 进阶
  • #632 MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么? 进阶

第8周(12.21-12.27)故障演练二 + 月度收口

配套实验:磁盘写满;连接数打满;误删表 binlog 闪回;5 类故障手册

表设计与数据类型偏记忆、难度低,放在月度收口周刚好——这周你精力主要在故障手册和博客上。

周一 12.21 4 道

  • #613 MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别? 基础
  • #614 MySQL 中 int(11) 的 11 表示什么? 基础
  • #615 MySQL 中 varchar 和 char 有什么区别? 基础
  • #1478 MySQL 中 VARCHAR(100) 和 VARCHAR(10) 的区别是什么? 基础

周二 12.22 4 道

  • #1217 MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么? 基础
  • #1379 在 MySQL 中存储金额数据,应该使用什么数据类型? 基础
  • #1377 MySQL 中 TEXT 类型最大可以存储多长的文本? 进阶
  • #1378 MySQL 中 AUTO_INCREMENT 列达到最大值时会发生什么? 进阶

周三 12.23 3 道

  • #12134 MySQL一张表最多可以有多少列? 基础
  • #1219 数据库的三大范式是什么? 基础
  • #9805 MySQL 在设计表(建表)时需要注意什么? 进阶

周四 12.24 3 道

  • #4944 什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点? 进阶
  • #4943 什么是数据库的逻辑删除?数据库的物理删除和逻辑删除有什么区别? 基础
  • #1476 为什么不推荐在 MySQL 中直接存储图片、音频、视频等大容量内容? 进阶

周五 12.25 3 道

  • #1418 什么是数据库的视图? 进阶
  • #633 MySQL 中 INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么? 基础
  • #1482 MySQL 中 EXISTS 和 IN 的区别是什么? 基础

周六 12.26 3 道

  • #1376 在 MySQL 中,你使用过哪些函数? 基础
  • #1419 什么是数据库的游标? 进阶
  • #1218 为什么阿里巴巴的 Java 手册不推荐使用存储过程? 进阶

现实校准(2026-11-09 记):第 1 周已经过去了

今天是 11.9(第 2 周周一)。第 1 周那 19 道如果没做完,不要往前挤,也不要熬夜补,按这个算术走:

  • 第 2、3 周题量本来就轻(12 道和 9 道),把第 1 周剩下的按每天 2 道叠进去,两周正好吃完;
  • 三道不能省:#106(三种日志的区别)、#589(一条 SQL 的执行过程)、#9498(两阶段提交)——这三道是后面所有题的底层,其它 16 道可以往后挪,这三道不行;
  • 如果第 1 周连 Docker 和 MySQL 都没跑起来,先补环境,题往后放——题是用来检验实验的,没有实验,刷题就是背课文。