初识MySQL三大日志

初识MySQL三大日志

Mysql日志包括错误日志、查询日志、事务日志等等,这里我们主要来看一下事务日志,也就是binlogredo 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,但是如果语句中出现了UUIDnow()等函数,会出现数据同步不一致的情况;
  • row:基于行的模式,记录的是行的变化,所以不会出现数据不一致的情况,但是在同步时会出现延迟;
  • mixed:混合模式,基于语句来判断使用statement还是row

undo log

undo log日志也叫回滚日志,用来回滚行记录到某个版本;事务未提交之前,undo log保存了未提交之前的版本数据,undo log中的数据可作为数据旧版本快照供其他并发事务进行快照读;是为了实现事务的原子性而出现的产物,在InnoDB存储引擎中用来实现MVCC

作者

ero

发布于

2022-03-10

更新于

2022-06-11

许可协议

评论