初识MySQL三大日志
This is a hidden message
Mysql日志包括错误日志、查询日志、事务日志等等,这里我们主要来看一下事务日志,也就是binlog、redo log以及undo log。
redo log
redo log也叫重做日志,是Innodb独有的日志,它让MySQL拥有了崩溃恢复的能力;

在事务执行的过程中,MySQL会将事务中操作的日志写入到redo log日志中,如果 MySQL 实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。
binlog
redo log 是物理日志,记录的内容是在某个数据页上做了什么修改,属于InnoDB引擎;
而binlog是逻辑日志,记录的是所有数据库表结构的变更,以及表数据的修改,binlog的主要目的是复制和恢复,属于MySQL Server。
而binlog日志有三种记录方式:
statement:记录的是SQL的原文,同步数据时会执行记录的SQL,但是如果语句中出现了UUID、now()等函数,会出现数据同步不一致的情况;row:基于行的模式,记录的是行的变化,所以不会出现数据不一致的情况,但是在同步时会出现延迟;mixed:混合模式,基于语句来判断使用statement还是row。
undo log
undo log日志也叫回滚日志,用来回滚行记录到某个版本;事务未提交之前,undo log保存了未提交之前的版本数据,undo log中的数据可作为数据旧版本快照供其他并发事务进行快照读;是为了实现事务的原子性而出现的产物,在InnoDB存储引擎中用来实现MVCC。






