MySQL日志

一.redo log和binlog的区别

binlog (二进制日志) 就像你的【财务总账】redo log (重做日志) 就像仓库的【临时出货单】

核心区别:binlog 负责“钱要对上”, redo log 负责“货不能丢”

二、核心区别对比表

特性Redo LogBinlog
归属InnoDB 存储引擎层特有的MySQL Server 层实现的,所有存储引擎都可以使用
日志类型物理日志逻辑日志
记录内容记录的是“在某个数据页上做了什么修改”记录的是原始SQL语句或行的变更逻辑(Statement 或 Row 格式)
写入方式循环写追加写
文件大小固定大小(如2个4GB文件),循环使用文件大小可配置,写满后会切换到下一个,不会覆盖旧日志
主要用途崩溃恢复数据归档主从复制数据恢复

三.总结

redo log 是 InnoDB 引擎的物理日志,用于崩溃恢复,它采用循环写的方式,为 Buffer Pool 提供了 WAL(Write-Ahead Logging)能力,大幅提升了数据库的写性能。

binlog 是 Server 层的逻辑日志,主要用于数据归档和主从复制,它采用追加写的方式,记录了所有的数据变更逻辑。

它们通过两阶段提交机制协同工作,确保了在数据库发生崩溃时,数据的一致性和持久性。”

四.mysql的WAL机制

WAL 的全称是 Write-Ahead Logging,中文叫预写式日志

它的核心原则非常简单且强大:在数据页被持久化到磁盘之前,必须先确保描述这次变更的日志已经持久化先写日志,再写磁盘的技术。

五、为什么需要 WAL?解决什么问题?

核心问题:磁盘 I/O 是数据库性能的主要瓶颈。

数据库的数据最终是存储在磁盘上的。如果每次执行一个 UPDATE 语句,都要等待随机 I/O 将对应的数据页写回磁盘,那么数据库的吞吐量将极其低下。

WAL 的解决方案:

  1. 将随机写变为顺序写:日志文件(如 Redo Log)是顺序追加写的,其速度远快于随机写数据页。
  2. 合并多次写操作:在内存中(Buffer Pool)对同一数据页的多次修改,最终只需要一次磁盘 I/O 写回数据文件。

总结

“WAL 是 InnoDB 存储引擎实现事务持久性的核心机制。它的核心思想是数据写入前,日志先行

具体来说,当发生数据修改时,InnoDB 首先在内存的 Buffer Pool 中完成修改,生成脏页,然后立即将这次修改的物理日志顺序写入 Redo Log。事务提交时,只需保证 Redo Log 落盘即可,而脏页则由后台线程异步刷回磁盘。

这种设计通过将随机写转换为顺序写,极大地提升了数据库的写入吞吐量,同时通过 Redo Log 的崩溃恢复能力,确保了数据的持久性。”

六、Crash-Safe 是什么?一个简单的定义

Crash-Safe 指的是:即使数据库服务器在任何时候发生意外崩溃(如断电、系统宕机、内核恐慌),在重启后,数据库也能保证:

  1. 已提交的事务(Committed Transactions)的数据不会丢失。
  2. 未提交的事务(Uncommitted Transactions)的数据会被回滚。

核心目标:确保数据的 持久性 和 一致性

七.两阶段提交:MySQL 将 redo log 的写入拆成了两个步骤:prepare 和 commit,中间再穿插写入binlog,这就是”两阶段提交”。

  1. Prepare 阶段:事务的 Redo Log 被写入,并标记为 prepare 状态。
  2. Commit 阶段:事务的 Binlog 被写入。
  3. 最终提交:Redo Log 被标记为 commit
崩溃时间点Redo Log 状态Binlog 状态恢复动作数据状态
Prepare 前未记录或未持久化未记录回滚事务所有修改丢失
Prepare 后,Binlog 完成前prepare不完整或未记录回滚事务所有修改丢失
Binlog 完成后,Commit 前prepare完整记录提交事务数据完全恢复
Commit 后commit完整记录提交事务数据完全恢复

八.binlog 日志有三种格式

特性STATEMENTROWMIXED
记录内容SQL 语句被修改的行数据自动选择 SQL 或 行数据
日志大小可能非常大中等
主从一致性(可能不一致)(强一致)
性能写入性能好写入和复制性能有压力综合性能较好
可读性好(直接看SQL)差(需要工具解析)混合
推荐度不推荐推荐(默认)推荐(旧版本)

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇