1、redo log是innoDB引擎特有的,记录的是引擎层的日志
binlog是MySQL的Server实现的,记录的是MySQL Server 层记录的日志,所有引擎都可以使用
2、redo log是物理日志,记录的是“在某个数据页上做了什么修改”;
binlog是逻辑日志记录的这个语句的原始逻辑,比如“给D=2这一行的C字段加1”。
3、redo log是循环写的,空间固定会用完;
binlog是可以追加写入的。“追加写“是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
例如一条语句:update user set name='小马' where id=1;
-
先查询到这条数据,如果有缓存,也会用到缓存。
-
把 name 改成
小马
,然后调用引擎的 API 接口,写入这一行数据到内存,同时记录 redo log。这时 redo log 进入 prepare 状态,然后告诉执行器,执行完成了,可以随时提交。 -
执行器收到通知后记录 binlog,然后调用存储引擎接口,设置 redo log为 commit 状态。
-
更新完成。