I、MySQL 根本逻辑架构
分层 | 组件 | 性能 |
---|---|---|
server 层 | 连接器、查问缓存、分析器、优化器、执行器、内置函数等 | 存储过程、触发器、视图 |
存储引擎层 | InnoDB、MyISAM、Memory 等(默认 InnoDB) | 数据的存储和提取 |
注:建表时应用参数 engine=$engine 指定存储引擎;server 为所有类型的存储引擎共用。
II、一条 SQL 语句如何执行
III、redo log 和 binlog
redo log | redo log | binlog |
---|---|---|
参数 | innodb_flush_log_at_trx_commit=1 | sync_binlog=1 |
作用 | crash-safe | 归档 |
分层 | 引擎特有 | server 层共有 |
反对引擎 | InnoDB | 不辨别引擎 |
日志级别 | 物理日志 | 逻辑日志 |
写入形式 | 循环写 | 追加写 |
存储占有 | 固定 | 不固定 |
注:redo log 的过程与《孔乙己》掌柜记账形象化类比了解
IV、两阶段提交
1、两阶段提交:redo log 的写入拆成了两个步骤:prepare 和 commit。
2、利用场景:数据库复原和 扩容。
3、目标:怎么让数据库复原到半个月内任意一秒的状态?
4、如果不应用两阶段提交:数据库的状态就有可能和用它的日志复原进去的库的状态不统一。