首页  

mysql redo undo binlog     所属分类 mysql 浏览量 991
redo log  重做日志
undo log  回滚日志 
binlog    二进制日志

redo log 物理日志,undo log 和 binlog 是逻辑日志
binlog     server层记录 无论用什么引擎,都会记录,用于主从复制,恢复等
redo log   InnoDB存储引擎层,保证事务安全 持久性
undo log   保存事务发生之前的数据,用于回滚,提供多版本并发控制下的读(MVCC),即非锁定读



crash-safe
InnoDB 保证数据库发生异常重启,之前提交的记录不丢失


redo log  物理日志,记录数据页修改 ,顺序写磁盘

事务开始之后,开始产生 redo log ,事务执行过程中,redo log 逐步落盘
当对应事务的脏页写入到磁盘之后,redo log 的使命就完成了,占用的空间可以被覆盖
InnoDB 的 redo log 固定大小,比如可以配置为一组 4 个文件,每个文件大小 1GB
从头开始写,写到末尾后回到开头循环写


redo log 包括两部分
一是内存中的日志缓冲(redo log buffer) 
二是磁盘上的重做日志文件(redo log file),该部分日志是持久的

落盘方式(将 innodb 日志缓冲区的日志刷新到磁盘)
Master Thread 每秒一次执行刷新 Innodb_log_buffer 到重做日志文件
每个事务提交时会将重做日志刷新到重做日志文件
当重做日志缓存可用空间少于一半时,重做日志缓存被刷新到重做日志文件



undo log (回滚日志) 保存了事务发生之前的数据的一个版本 用途 用于回滚 提供多版本并发控制下的读(MVCC),非锁定读 事务开始之前,将当前事务版本生成 undo log 事务提交之后,undo log 并不能立马删除,而是放入待清理的链表 由 purge 线程判断是否可以清理 undo log 的日志空间 undo log 逻辑日志,保存事务发生之前上一个版本的数据,可以用于回滚 当事务需要读取老版本的数据,可顺着 undo 链找到满足其可见性的记录 默认 undo 保存在共享表空间 MySQL5.7 之后 支持独立 undo 表空间
binlog 二进制日志 可以简单理解为 存储着每条变更的SQL语句 可以用于恢复 可用于主从复制中,从库利用主库上的 binlog 进行重放,实现主从同步 用于基于时间点、位点等的还原操作 binlog 模式分三种 Statement Row Mixed statement 记录执行语句 不需要记录每一行数据的变化 存储过程中使用 last_insert_id() 函数,可能会使 slave 和 master 上得到不一致的 id 兼容问题 row 模式 记录每一行数据的变化 可能会产生大量的日志 Mixed 模式 之前的 MySQL 一直都只有基于 statement 的复制模式,直到 5.1.5 版本的 MySQL 才开始支持 row 复制 从 5.0 开始,MySQL 的复制已经解决了大量老版本中出现的无法正确复制的问题 但是由于存储过程的出现,给 MySQL Replication 又带来了更大的新挑战 事务提交的时候,一次性将事务中的 sql 语句 按照一定的格式记录到 binlog 中 一个事务可能包含多个 sql 语句 默认保存时间 expire_logs_days
mysql各种日志文件介绍

上一篇     下一篇
甜歌系列

mysql的读已提交和可重复读

springboot基础配置

tomcat8 嵌入式 servlet 实例

tomcat8 连接器

Tomcat NIO 处理机制