MySQL 架构怎么理解:复制、日志、索引和运维问题

2次阅读
没有评论

MySQL 的知识点很多,容易散成一堆面试问答。把它们串起来,可以从四条线看:复制链路、存储引擎、日志体系和查询优化。

主从复制靠 binlog 和 relay log 串起来

MySQL 主从复制的基本流程可以拆成三个角色。

主库把数据变更写入 binlog。从库 I/O 线程拉取主库 binlog,写入自己的 relay log。从库 SQL 线程再读取 relay log,把变更重放到本地。

这套机制说明了几个常见问题:

  • 主从延迟本质是重放速度跟不上写入速度。
  • 主库压力、网络抖动、从库慢 SQL 都可能放大延迟。
  • 做读写分离时,必须考虑读到旧数据的可能性。

如果业务要求写后立刻读到最新值,要么读主库,要么设计读自己写策略。

InnoDB 和 MyISAM 的边界很清楚

现在大多数业务默认选择 InnoDB,因为它支持事务、行级锁、MVCC、崩溃恢复和更完整的并发能力。MyISAM 的历史价值更多体现在表锁、简单读多写少场景和一些老系统兼容上。

常见差异可以这样记:

  • InnoDB 支持事务,MyISAM 不支持。
  • InnoDB 默认行级锁,MyISAM 是表级锁。
  • InnoDB 支持 MVCC,适合高并发读写。
  • MyISAM 曾经在 count(*) 等场景有一些结构性优势,但不适合作为现代业务默认选择。

选择引擎不是看单点性能,而是看一致性、并发和故障恢复要求。

日志决定可靠性和排障能力

MySQL 里常见日志包括错误日志、慢查询日志、binlog、relay log、redo log 和 undo log。

binlog 面向复制和恢复,记录逻辑变更;redo log 面向崩溃恢复,保证已提交事务持久化;undo log 支持回滚和 MVCC;慢查询日志帮助定位耗时 SQL;错误日志用于看启动、崩溃和运行异常。

事务提交时先写日志再写数据,这种预写日志思想是数据库可靠性的关键。

SQL 优化从执行计划开始

遇到慢 SQL,先看 EXPLAIN,不要凭感觉加索引。

重点关注:

  • type:访问方式,越接近 const、ref、range 通常越好。
  • key:实际使用了哪个索引。
  • key_len:索引使用长度,能看出复合索引用到哪一段。
  • rows:预计扫描行数。
  • Extra:是否出现 filesort、temporary、using index 等信息。

索引不是越多越好。索引会占空间,也会拖慢写入和维护。只有能显著减少扫描范围、排序成本或回表成本的索引才值得保留。

运维问题要有固定动作

数据库 CPU 飙高时,先看当前连接和正在执行的 SQL,再看慢日志、错误日志、磁盘 I/O 和锁等待。不要第一时间重启数据库。

备份也要按恢复目标设计。逻辑备份易迁移但恢复慢,物理备份更适合大库。除了备份成功,还要定期验证恢复速度和恢复完整性。

主从一致性可以用校验工具定期检查。字符集要提前统一,尤其是需要 emoji 或多语言时,优先使用 utf8mb4

实用结论

MySQL 架构不是零散命令集合。复制负责扩展读取和容灾,日志负责可靠性和恢复,存储引擎决定事务与锁能力,索引和执行计划决定查询成本。

排查 MySQL 问题时,先判断它属于哪条线,再动手处理。这样比记一堆孤立命令更稳。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计1260字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)