前置知识

回顾下事务的4大特性

A 原子性 undo log实现
I 隔离性 锁实现
D持久性 redo log实现
C一致性 由 A,I,D保证C的一致性

日志分类

innoDB层

redo log(简单理解:为了事务提交用的日志)D持久性保证

作用
当数据发生修改的时候,innoDB会先将记录写到redo log中,并更新内存,这样update才算完成
同时innoDB会在合适的时机将记录写到磁盘上
优点
如果数据因为各种原因,断电,服务器挂了,等等,持久化失败了。因为数据还保存在redo log,导致 数据不会丢失,还能恢复
特点
日志是循环写的,写满了以后,覆盖以前的日志接着写。

undo log(简单理解:为了事务回滚用的日志)A 原子性保证

作用
在操作任何数据之前,先将数据备份到undo log中。然后再对数据进行修改,如果出现了错误,或者用户执行了ROLLBACK语句,系统可以用undo log中的备份,来恢复成事务开始前的状态。
例如

SQL语句 undo log的操作 rollback操作
delete XXX insert XXX 将XXX恢复
insert XXX delete XXX 将XXX删除
update XXX=3(原来XXX=0) update XXX=0 将XXX set 0

mysql-server层

binlog(简单理解:为了定期备份,默认不开启)

特点:server层的日志,不同于redo log 跟 undo log,binlog是所有引擎都有的,且记录的是这个语句的 原始逻辑
作用:数据恢复,找到最近的一次全量备份数据
从备份的时间点开始,将备份的binlog取出来,重放到要恢复的那个时刻

数据更新流程:

image.png