MySQL日志
1.介绍
MySQL的日志分为三部分,分别是binlog,undolog,redolog。
2.binlog日志
binlog:
二进制的全量日志,
可以记录MySQL所有库的所有增伤改的操作,
MySQL库级别,默认不开启,
可以是追加写的方式,不会覆盖之前的日志信息。
3.undolog日志
undolog:
innodb存储引擎级别日志,
保证事务的原子性,
用来实现多版本并发控制 MVCC,
undolog是逻辑日志,
意思是如果事务中有insert记录,则会在undolog中有个delete记录。以此来实现rollback。
4.redolog日志
redolog:
innodb存储引擎级别日志,
保证事务的持久性,
redolog是在内存中,
从Buffer Pool到Log Buffer再到OS Buffer,
redolog是固定大小的,它是循环写的过程,空间会用完。
5.redolog的两阶段提交
1.由于redolog是在innodb中执行的,因此,任何事务都能被记录。
2.binlog是在执行器中执行,它是mysql都有的,任何操作都会被记录binlog。
如果1未执行完,2执行完了,此时处于prepare阶段。
如果1执行完了,2也执行完了,此时处于commit阶段。
如果执行器执行完了,但执行引擎未执行完。mysql crash了。则会在binlog中记录数据,但redolog中没有。此时数据会不一致。
如果执行引擎执行完了,但执行器未执行完。mysql crash了。则会在redolog中记录数据,但binlog中没有。此时数据会不一致。
也就是说,如果执行器或执行引擎中任何一个环节没有执行完,则数据都不完整。
prepare和commit都执行完了。保证数据的完整性,这就是两阶段提交。