redo log (重做日志)(保证事务的原子性和持久性)
- InnoDB 存储引擎层特有的一种物理日志,负责把事务对数据库所做的所有修改都记录下来。(系统奔溃重启时可以通过 redo log 日志找回记录)
- redo log 在事务进行中不断的被写入到磁盘,由于是并发写入的,所以日志不是随事务提交的顺序写入磁盘的。
- 循环写的,空间固定,如果用完了就会覆盖以前的日志。
binlog (二进制日志)
- binlog 是 server 层的一种逻辑日志,记录的是对应的 sql 语句,任何存储引擎对数据库的修改都会产生 binlog 日志。
- binlog 日志只在事务提交完成后进行一次写入磁盘的操作。
- binlog 是可以追加写入的,也就是写到一定大小后会切换到下一个,并不会覆盖以前的日志。
undo log (回滚日志)(保证事务的一致性)
- 如果事务执行过程中发生错误,导致执行一半就结束了,但执行过程中已经修改了数据,为了保证事务的原子性,就需要把数据恢复为原来的样子,所以引入了 undo log 来提供回滚功能。undo log 是逻辑日志,当delete一条记录时,undo log中会记录一条对应的insert记录,当update一条记录时,它会记录一条对应相反的update记录。根据记录来进行记录。
- undo log 另一个作用是实现多版本并发控制(MVCC),当用户读取一行记录时,若该记录已经被其他事务占用,当前事务可以通过 undo log 读取之前的行版本信息,以此实现非锁定读取。
- undo log 也会产生 redo log,这是因为 undo log 也需要保证持久性。