前置知识
回顾下事务的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取出来,重放到要恢复的那个时刻