MySql基础架构和日志系统
select * from T where ID>2;
大题来说Mysql可以分为Server层和存储引擎层.
Server层包括连接器,查询缓冲,分析器,优化器,执行器,所有跨存储引擎的功能都在这层实现。
引擎层是负责数据的写入和读取,其架构模式是插件式的,支持InnoDB,MyISAM,Memony等多个引擎,Mysql从5.5.5开始默认采用InnoDB引擎。
连接器:连接管理以及权限认证。
查询缓冲:查询命中则直接返回。
分析器:词法分析,语法分析。
优化器:执行计划生成,返回索引。
执行器:操作引擎,放回结果。
存储引擎:存储数据,提供读写接口。
日志系统:
redolog(重做日志,引擎独有,为物理日志记录做了什么):
其工作在引擎层。当有一条更新记录时,InnoDB引擎会先把记录写到redolog日志中,再更新内存,并在适当的时候(系统空闲)写入磁盘。
redolog是由固定大小(可设置)的环形缓冲区,先由write pos记录当前位置,一边写一边后移,checkpoint是当前更新到的数据信息,更新一条擦除一条。这种行为能够保证数据提交之后即使系统宕机也不会丢失称crash-safe
binlog(归档日志,MySQL服务层共有,为逻辑日志记录怎么做的):
其工作在服务层。在MySQL的服务层将操作的原始逻辑写入到该日志文件。
两阶段提交保证日志一致性:
在写入时将redolog的状态拆成两个,prepore和commit两阶段,目的使两份日志文件保持逻辑一致。如果不使用两阶段提交,首先假设先写入redolog,在尚未写入binlog时系统崩溃,恢复数据时,redolog中会比binlog多出一条事务,再假设先写入binlog,在尚未写redolog是系统崩溃,数据恢复时,binlog中会比redolog多处一条事务,造成数据恢复不正确。