程序员

mysql日志

2020-07-02  本文已影响0人  尉昌达

1.Redo日志—innodb存储引擎的日志文件

既然要避免io,为什么写redo log的时候不会造成io的问题?

内存刷到磁盘

2.Undo log

3.binlog—服务端的日志文件

Binlog是server层的日志,主要做mysql功能层面的事情

  1. redo是innodb独有的,binlog是所有引擎都可以使用的
  2. redo是物理日志,记录的是在某个数据页上做了什么修改,binlog是逻
    辑日志,记录的是这个语句的原始逻辑
  3. redo是循环写的,空间会用完,binlog是可以追加写的,不会覆盖之前
    的日志信息,Binlog中会记录所有的逻辑,并且采用追加写的方式

数据更新的流程

数据更新
执行流程:
1、执行器先从引擎中找到数据,如果在内存中直接返回,如果不在内存中,查 询后返回
2、执行器拿到数据之后会先修改数据, 然后调用引擎接口重新吸入数据
3、引擎将数据更新到内存,同时写数据 到redo中,此时处于prepare阶段,并通 知执行器执行完成,随时可以操作
4、执行器生成这个操作的binlog
5、执行器调用引擎的事务提交接口,引 擎把刚刚写完的redo改成commit状态, 更新完成
(3,4,5,保证redoLog和binLog的数据一致性)

Redo log的两阶段提交

上面2中方式都会导致数据的不一致。

上一篇下一篇

猜你喜欢

热点阅读