MySQL 8.4 LTS 知识手札
本手札与路线页一一对应。默认实验基线是 MySQL 8.4 LTS;MySQL 9.x 只出现在第 12 站升级支线。
共享实验库
每站的 SQL 都可以在可丢弃的 mysql_course 数据库中运行。第一次进入先执行:
sql
SELECT VERSION() AS server_version;
SELECT @@SESSION.sql_mode AS sql_mode;
SELECT @@character_set_server AS charset_name,
@@collation_server AS collation_name;版本、SQL mode、字符集和时区会改变 SQL 行为。任何结论都要同时记录环境,不要只保存查询结果截图。
12 站目录
- 实验环境与服务器地图
- 类型、约束与建模
- 安全 CRUD 与查询语义
- JOIN、聚合与结果粒度
- CTE、窗口与 JSON
- 索引与执行计划
- 优化器与性能证据
- 事务、隔离与 MVCC
- 锁、死锁与在线变更
- InnoDB、日志与持久性
- 安全、备份与恢复
- 复制、高可用与升级
使用方式
每站先读 index,再完成专题笔记中的无答案练习,最后打开 99-exercise-answers。答案用于核对机制和证据,不用于替代实验。
总练习
为什么“SQL 在我的机器上能运行”不足以证明它可以上线?列出至少四项还必须记录的环境或运行证据。
数据库实验的证据链
每次实验至少保存四样东西:
- 环境快照:版本、SQL mode、隔离级别、字符集、时区和自动提交。
- 输入脚本:建表、种子数据、会话设置,能够重复执行或明确清理。
- 观察结果:查询结果、EXPLAIN、锁等待、状态变量或复制位置。
- 结论边界:结论在哪些数据量、并发、版本和故障条件下成立。
遇到问题先走这条路
- 结果不对:先确认连接的 schema、事务是否已提交、NULL 和时区语义。
- 查询变慢:先看实际扫描行数、锁等待、返回数据量,再讨论索引。
- 写入冲突:记录事务开始时间、访问顺序、隔离级别和错误码。
- 宕机担忧:确认 redo/binlog/备份链和最近一次恢复演练,而不是只看配置。
- 复制异常:同时检查 GTID、SQL/IO 线程、延迟、错误队列和应用重连。
- 升级前:先在影子实例回放 schema、查询、备份恢复和连接器认证。
三种学习入口
- 新手:先做 1~5 站,学会写安全 SQL、看结果粒度和用 EXPLAIN 提问。
- 有经验者:从 6~10 站反查线上慢查询、事务和锁问题;不要跳过两会话实验。
- 运维/架构者:重点完成 11~12 站的恢复、复制、RPO/RTO 与升级回滚演练。
当你能用一张图解释“应用写入 → 事务日志 → 数据页 → 复制/恢复”,并能用实验复现一次阻塞或恢复,才算真正从会写 SQL 走到会解释数据库。