MySQL-redo log, undo log, binlog

redo log(重做日志)#

  • 定义:物理日志,记录数据页的修改操作,InnoDB引擎层特有
  • 作用:
    • 减少每次更新操作都要写磁盘造成IO 成本、查找成本较高,利用WAL(Write-Ahead Logging)技术,先写日志,再写磁盘
    • crash-safe能力,当数据库发生异常时,之前提交的记录也不会丢失
  • 数据结构:循环链表,首尾相连,大小固定,写满会先清空再写
  • innodb_flush_log_at_trx_commit:设置为1时,每次事务的redo log都直接持久化到磁盘。
  • innodb_log_files_in_group:控制几个redo log文件,取值范围是1~4

binlog(归档日志)#

  • 定义:逻辑日志,记录SQL的动作,Server层实现,所有引擎都可使用
  • 作用:用来归档
  • 数据结构:链式结构,追加写
  • sync_binlog:设置为1时,每次事务的 binlog 都持久化到磁盘

undo log(回滚日志)#

  • 定义:物理日志,记录事务中每次数据更新前的状态
  • 作用:主要用于保证数据的原子性,保存了事务发生之前的数据的一个版本,可以用于回滚。是MVCC (多版本并发控制) 实现的关键
  • 数据结构:默认存放在共享表空间 ibdata
  • innodb_max_undo_log_size:控制最大 undo tablespace 文件的大小,当启动了 innodb_undo_log_truncate 时,undo tablespace 超过 innodb_max_undo_log_size 阀值时才会去尝试 truncate。该值默认大小为 1G,truncate 后的大小默认为 10M。
  • innodb_undo_tablespaces:设置 undo 独立表空间个数,范围为 0-128,5.7 版本默认为 0,0 表示不开启独立 undo 表空间。该参数只能在最开始初始化 MySQL 实例的时候指定。
  • innodb_undo_directory:设置 undo 表空间的存放目录,默认数据目录。
  • innodb_undo_log_truncate:设置 undo 表空间是否自动截断回收。该参数生效的前提是,已设置独立表空间且独立表空间个数大于等于 2 个。

relay log(中继日志)#

  • 定义:物理日志。主从同步需要的中间产物
  • 作用:用来主从同步间,从库记录从主库同步过来的binlog日志的一个临时日志

两阶段提交#

数据库内核月报-MySQL · 源码分析 · 内部 XA 和组提交

img

参考#

posted @   FynnWang  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示