Mysql从整体来说分为Server层和引擎层;
binlog是属于Server层,redo log是innoDB引擎层所特有的。
binlog没有crash-safe,如果要实现,就是基于checkpoint,会耦合存储引擎层。
redolog是物理日志,记录的是在某个数据页做了什么修改;
binlog是逻辑日志,记录这个语句的原始逻辑,如给id=2这一行的c字段加1
redolog是循环写的,空间固定;binlog是追加写,不会覆盖。
update 过程
执行器先找到引擎拿到要更新的数据,如果在内存,直接返回,否则从磁盘读入内存; 执行器调用引擎写入数据; 引擎将这个新数据更新道内存中,同时记录redo log,此时redo log处于prepare状态; 执行器写操作binlog,binlog写入磁盘; 执行器提交事务,redo log更改为commit状态。更新完成。
redo log的两阶段提交:prepare和commit
select过程
客户端到连接器,连接器管理连接,权限验证 连接器查询缓存,命中则返回结果,否则到分析器 分析器做词法分析,语法分析 优化器做执行计划生成,索引选择 执行器执行语句,返回结果
存储引擎存储数据,提供读写接口。
