MySQL日志梳理 & MySQL主从同步原理

MySQL日志梳理 

  • undo log(回滚日志):是InnoDB存储引擎层生成的日志,实现了事务中的原子性,主要用于事务的回滚以及保证MVCC。
  • redo log(重做日志):是InnoDB存储引擎层生成的事务日志,实现了事务中的持久性,主要用于断电等故障恢复。
  • bin log(同步日志或归档日志或二进制日志):binnary log是MySQL Server层生成的日志,是提供给所有的存储引擎都可以用的归档日志,主要用于数据恢复或者进行数据同步(主从复制),记录所有数据的更改。

undo log、redo log和bin log的作用是什么?

  • undo log和redo log是InnoDB提供的事务日志,而bin log它是由MySQL的Server层实现的归档日志。

undo log基本概念

  • undo log是一种用于撤销回退的日志 - 回滚日志,用于记录数据被修改前的信息,作用包含两个:保证事务的原子性(提供回滚)和MVCC(多版本并发控制)!
  • 在数据库事务开始之前,MySQL会记录更新前的数据到undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用undo log来进行回退。
  • undo log产生和销毁:undo log在事务开始前产生;事务在提交时,InnoDB并不会立刻删除undo log,因为后续还可能会用到 undo log,这些日志可能还用于MVCC,但在事务提交时,InnoDB会将该事务对应的undo log放入到删除列表中,后面会通过后台线程purge thread来进行回收处理。
  • undo log的存储:undo log采用段的方式进行管理和记录,存放在 rollback segment 回滚段当中,内部包含 1024 个undo log segment!

注意:undo log也会产生对应的 redo log,因为undo log它本身也是一条SQL,也要实现持久性保护!

undo log VS redo log 

  • undo log和redo log记录物理日志不一样,它是逻辑日志,可以认为当delete一条记录时,undo log中会记录对应的一条insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚~! 

undo log的作用

  1. 提供回滚操作[undo log实现事务的原子性]
  • 在数据修改的时候,不仅记录了redo log,还记录了相对应的undo log,如果因为某些原因导致事务执行失败了,可以借助undo log进行回滚。

    2. 提供多版本控制(MVCC)[undo log是实现多版本并发控制(MVCC)的一个基础]

猜你喜欢

转载自blog.csdn.net/weixin_53622554/article/details/133750474