MySql基础架构和日志系统

select * from T where ID>2;

大题来说Mysql可以分为Server层和存储引擎层.

MySql基础架构和日志系统

Server层包括连接器,查询缓冲,分析器,优化器,执行器,所有跨存储引擎的功能都在这层实现。

引擎层是负责数据的写入和读取,其架构模式是插件式的,支持InnoDB,MyISAM,Memony等多个引擎,Mysql从5.5.5开始默认采用InnoDB引擎。

连接器:连接管理以及权限认证。

查询缓冲:查询命中则直接返回。

分析器:词法分析,语法分析。

优化器:执行计划生成,返回索引。

执行器:操作引擎,放回结果。

存储引擎:存储数据,提供读写接口。

日志系统:

redolog(重做日志,引擎独有,为物理日志记录做了什么):

MySql基础架构和日志系统

其工作在引擎层。当有一条更新记录时,InnoDB引擎会先把记录写到redolog日志中,再更新内存,并在适当的时候(系统空闲)写入磁盘。

redolog是由固定大小(可设置)的环形缓冲区,先由write pos记录当前位置,一边写一边后移,checkpoint是当前更新到的数据信息,更新一条擦除一条。这种行为能够保证数据提交之后即使系统宕机也不会丢失称crash-safe

binlog(归档日志,MySQL服务层共有,为逻辑日志记录怎么做的):

其工作在服务层。在MySQL的服务层将操作的原始逻辑写入到该日志文件。

两阶段提交保证日志一致性:

MySql基础架构和日志系统

在写入时将redolog的状态拆成两个,prepore和commit两阶段,目的使两份日志文件保持逻辑一致。如果不使用两阶段提交,首先假设先写入redolog,在尚未写入binlog时系统崩溃,恢复数据时,redolog中会比binlog多出一条事务,再假设先写入binlog,在尚未写redolog是系统崩溃,数据恢复时,binlog中会比redolog多处一条事务,造成数据恢复不正确。