redo log是InnoDB实现事务持久性的关键机制,采用WAL技术先写日志再改数据页,确保崩溃后可通过重放日志恢复已提交事务;其为物理日志、循环写入,与binlog在层级、内容、用途和写入方式上均不同,通过innodb_log_file_size等参数可优化管理。

redo log(重做日志)是 MySQL InnoDB 存储引擎中用于保证事务持久性的重要机制。它记录了数据页的物理修改,确保在数据库发生崩溃或意外宕机后,未写入磁盘的已提交事务能够被恢复。
redo log 的作用
InnoDB 使用 WAL(Write-Ahead Logging,预写日志)技术,所有对数据的修改必须先写日志再改内存中的数据页。这样做的好处是:
避免每次事务提交都直接刷新数据页到磁盘,提升性能 即使系统崩溃,只要 redo log 还在,就可以通过重放日志恢复已提交的事务 保障 ACID 中的 D(Durability,持久性)特性
redo log 的工作原理
redo log 是一个环形缓冲区(log buffer),其内容会定期刷盘到磁盘上的 redo log 文件(通常为 ib_logfile0 和 ib_logfile1)。
当事务执行更新操作(INSERT、UPDATE、DELETE)时,InnoDB 会把“某数据页的某个偏移位置修改了什么值”记录到 redo log buffer 事务提交时,redo log buffer 中的内容会根据策略(如 innodb_flush_log_at_trx_commit 设置)同步或异步写入磁盘 后台线程会逐步将脏页刷回数据文件,这个过程可以延迟,但 redo log 必须先落盘
与 binlog 的区别
很多人容易混淆 redo log 和 binlog,它们有本质不同:
牛NIUCMS本地O2O系统
牛NIUCMS本地O2O系统是一个以php+mysql进行开发的o2o网站系统。NIUCMS是一款强大的网站管理系统。支持智慧城市、智慧小区、智慧乡村、本地生活门户、本地O2O平台的构建。请注意以下几点:1、这套源码必须要服务器支持伪静态,是支持.htaccess规则的伪静态,一般Apache服务器支持,别搞的下载回去以后说什么缺 少文件,其实源码并非缺少文件。2、这套源码请在php 5.4环境下
0 查看详情
层级不同:redo log 是 InnoDB 引擎层的日志;binlog 是 MySQL Server 层的日志 内容不同:redo log 记录的是物理级别的页修改;binlog 记录的是逻辑操作,如 SQL 语句或行变更 用途不同:redo log 主要用于崩溃恢复;binlog 用于主从复制和数据审计 写入方式不同:redo log 是循环写;binlog 是追加写
配置与管理要点
可以通过以下参数优化 redo log 行为:
innodb_log_file_size:单个 redo log 文件大小,越大能支持更大并发,但恢复时间变长 innodb_log_files_in_group:redo log 文件数量,一般为 2 innodb_flush_log_at_trx_commit:控制事务提交时日志刷盘策略,值为 1 最安全(每次提交都刷盘),0 或 2 可提升性能但有丢数据风险
基本上就这些。redo log 是 InnoDB 实现高可靠性和高性能的关键组件,理解它有助于排查性能问题和设计容灾方案。
以上就是mysql中redo log是什么的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1052196.html
微信扫一扫
支付宝扫一扫