https://blog.csdn.net/weixin_45676738/article/details/124770085
https://blog.csdn.net/TABE_/article/details/124935324
三种log
REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。
UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。
BIN LOG称为 二进制日志,mysql集群数据同步以及数据恢复功能。
首先提及一下事务的ACID :原子性、一致性、隔离性和持久性
隔离性:是由 锁实现的
原子性、一致性、和持久性 是由 redo log 和undo log 来保证的
binlog适用于维护集群内数据的一致性,redo log用于崩溃恢复,undo log相对于前面两种日志更好理解些,就是为了回滚事务用的
undolog(回滚日志 )
作用1:回滚数据(就是事务回滚操作会执行undo log日志恢复到事务开始前)
作用2:MVCC(记录多版本数据-解决事务的隔离性)
redolog
redo log 能保证对于已经COMMIT的事务产生的数据变更,即使是系统宕机崩溃也可以通过它来进行数据重做,达到数据的一致性,这也就是事务持久性的特征,一旦事务成功提交后,只要修改的数据都会进行持久化,不会因为异常、宕机而造成数据错误或丢失,所以解决异常、宕机而可能造成数据错误或丢是redo log的核心职责。
binlog
binlog即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的DDL 和 DML 等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、show等)。
binlog主要应用场景:
一是用于 数据恢复
二是用于 数据复制(集群数据同步作用)
mysql两阶段提交
InnoDB引擎更新一条指定数据的过程如下:
可以看到,InnoDB在写redo log时,并不是一次性写完的,而有两个阶段,Prepare与Commit阶段,这就是"两阶段提交"的含义。