Mysql的三种日志

MySQL 主要有三种重要的日志:Redo Log(重做日志)、Undo Log(回滚日志)、Binlog(二进制日志)。它们在 事务管理、数据恢复和主从复制 中起着关键作用。


1. Redo Log(重做日志)—— 保证事务的持久性(crash-safe)

作用

  • 记录事务操作(INSERT/UPDATE/DELETE)对数据页的修改,以支持 数据库崩溃后的数据恢复
  • 解决 MySQL InnoDB 引擎的 WAL(Write-Ahead Logging,预写日志) 机制。
  • 保障事务 持久性(Durability,D),即 即使数据库宕机,也能恢复已提交事务的数据

工作原理

  • 事务执行时,先写 Redo Log,再更新数据页WAL 机制)。
  • 数据库崩溃后,InnoDB 可以用 Redo Log 进行数据恢复

两部分

  1. Redo Log Buffer(内存中的重做日志)
    • 事务执行时,先写入 内存(Redo Log Buffer)
  2. Redo Log File(磁盘上的重做日志文件)
    • 事务提交时,Redo Log 会刷盘,确保数据不会丢失

刷盘策略

  • innodb_flush_log_at_trx_commit 参数控制
    • 0:每秒写入 OS 缓存,不立刻刷盘,可能丢失事务。
    • 1(默认):事务提交时立即刷盘,最安全
    • 2:事务提交时写入 OS 缓存,每秒刷盘。

刷盘(Flush to Disk) 指的是 将数据从内存(Buffer)写入磁盘,确保数据持久化,防止系统崩溃时数据丢失

在 MySQL 和操作系统的文件管理中,数据通常 不会立即写入磁盘,而是先存入内存缓冲区,以提高性能。只有在特定时刻,才会真正写入磁盘,这个过程就叫做 刷盘(Flush to Disk)


2. Undo Log(回滚日志)—— 事务回滚 & MVCC

作用

  • 事务回滚(Rollback):如果事务失败或 ROLLBACK,可撤销未提交的修改。
  • 多版本并发控制(MVCC):用于 REPEATABLE READ 隔离级别,支持 快照读,防止脏读/不可重复读。

工作原理

  • 事务执行前,会把旧值保存到 Undo Log
  • 如果事务回滚,Undo Log 可用来恢复数据的旧值

存储位置

  • 存储在 InnoDB 的 rollback segment(回滚段)中
  • 在事务提交后,Undo Log 可能会被删除(purge 机制)

3. Binlog(二进制日志)—— 逻辑日志,支持主从复制 & 数据恢复

作用

  • 记录所有对数据库的修改(INSERT/UPDATE/DELETE),不包含 SELECT
  • 用于数据恢复(point-in-time recovery)。
  • 支持 MySQL 主从复制(Replication)。
  • 支持增量备份(Incremental Backup)。

与 Redo Log 的区别

Redo LogBinlog
层级InnoDB 引擎层MySQL Server 层
记录内容物理日志(数据页的更改)逻辑日志(SQL 语句)
作用保证事务持久化,崩溃恢复主从复制、数据恢复
何时写入事务执行时事务提交时
是否可恢复未提交事务可以不行
存储方式循环覆盖,空间固定追加写入,可清理

存储格式

  • Statement(语句级): 记录 SQL 语句。
  • Row(行级,默认): 记录数据行的变化,最安全。
  • Mixed(混合模式): 结合 Statement 和 Row。

存储位置

[mysqld]
log_bin = /var/log/mysql/binlog

查看 Binlog

SHOW BINARY LOGS; -- 查看 Binlog 文件
SHOW BINLOG EVENTS IN 'binlog.000001'; -- 查看 Binlog 事件

总结

日志类型作用存储位置是否循环覆盖作用范围
Redo Log(重做日志)崩溃恢复,保证持久性InnoDB 引擎层事务提交后仍有用
Undo Log(回滚日志)事务回滚、MVCCInnoDB 回滚段否(但可清理)事务回滚时使用
Binlog(二进制日志)数据恢复、主从复制MySQL Server 层否(可手动清理)事务提交后写入

这三种日志共同保证 MySQL 数据的安全性、可恢复性、主从同步,是数据库事务管理的重要组成部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值