日志的区别

2024-11-12 21:33

redo log与binlog的区别

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。

  2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。

  3. redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

更新语句的执行流程

通过一个更新语句的流程,分析日志系统。

mysql>update T set c=c+1 where ID=2;

「执行流程:」

  1. 首先连接器连接数据库

  2. 分析器通过词法,语法分析发现这是一条更新语句

  3. 优化器决定使用ID这个索引

  4. 执行器找引擎取ID=2的这行数据。ID是主键,引擎用索引找到这一行,如果这一行数据本来就在内存中,直接返回给执行器,否则需要从磁盘读入内存。

  5. 执行器拿到数据后。把这个数据的c+1,得到一行新的数据,再调用引擎接口写入这行新数据。

  6. 引擎将这个数据更新到内存中,同时将这个更新操作记录在redo log, 此时redo log 处于prepare(准备)状态,告知执行器执行完成了,可以随时提交事务。

  7. 执行器生成这个操作的binlog,并将binlog写入磁盘。

  8. 执行器调用存储引擎的提交事务接口,引擎把刚刚写入的redo log改成commit(提交)状态,更新完成。

图中浅色框表示是在InnoDB内部执行的深色框表示是在执行器中执行的

图片

相关文章
热点文章
精彩视频
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量: