当前位置:网站首页>Mysql的redo log详解
Mysql的redo log详解
2022-08-05 03:58:00 【IT东东歌】
1、介绍
redo日志是在事务提交后生成的,如果此时服务down掉,后期重启可以用redo日志恢复数据。保证事务的持久性(事务提交后永久生效)。
2、redo日志生成流程

第1步:先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝
第2步:生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值
第3步:当事务commit时,将redo log buffer中的内容刷新到redo log file,对 redo log file采用追加写的方式
第4步:定期将内存中修改的数据刷新到磁盘中
3、redo日志内存层面
在服务器启动时就向操作系统申请了一大片称之为redo log buffer的连续内存空间,翻译成中文就是redo日志缓冲区。这片内存空间被划分成若干个连续的redo log block。一个redo log block占用512宁节大小。
默认是16M ,可以修改范围:4096M~ 1M
查看:show variables like '%innodb_log_buffer_size%'
4、redo日志磁盘层面
存放位置(默认):/var/lib/mysql
也是默认开辟了空间大小,不会随着时间增加而增加。

5、刷盘策略
redo log的写入并不是直接写入磁盘的,InnoDB引擎会在写redo log的时候先写redo log buffer,之后以一定的频率刷入到真正的redo log file中。这里的一定频率怎么看待呢?这就是我们要说的刷盘策略。

注意,redo log buffer刷盘到redo log file的过程并不是真正的刷到磁盘中去,只是刷入到文件系统缓存(pagecache)中去(这是现代操作系统为了提高文件写入效率做的一个优化),真正的写入会交给系统自己来决定((比如page cache足够大了)。那么对于InnoDB来说就存在一个问题,如果交给系统来同步,同样如果系统宕机,那么数据也丢失了(虽然整个系统宕机的概率还是比较小的)。
针对这种情况,InnoDB给出innodb_flush_log_at_trx_commit参数,该参数控制commit提交事务时,如何将redo log buffer中的日志刷新到redo log file 中。它支持三种策略:

6、策略总结
0︰表示每次事务提交时不进行刷盘操作。(系统默认master thread每隔1s进行一次重做日志的同步)
1:表示每次事务提交时都将进行同步,刷盘操作(默认值)
2︰表示每次事务提交时都只把redo log buffer内容写入page cache,不进行同步。由os自己决定什么时候同步到磁盘文件。
1)innodb_flush_log_at_trx_commit=1
为1时,只要事务提交成功,redo log记录就一定在硬盘里,不会有任何数据丢失。
如果事务执行期间MysQL挂了或宕机,这部分日志丢了,但是事务并没有提交,所以日志丢了也不会有损失。可以保证ACID的D,数据绝对不会丢失,但是效率最差的。
建议使用默认值,虽然操作系统宕机的概率理论小于数据库宕机的概率,但是一般既然使用了事务,那么数据的安全相对来说更重要些。
2)innodb_flush_log_at_trx_commit=2
为2时,只要事务提交成功,redo log buffer中的内容只写入文件系统缓存( page cache )。
如果仅仅只是MySQL挂了不会有任何数据丢失,但是操作系统宕机可能会有1秒数据的丢失,这种情况下无法满足ACID中的D。但是数值2肯定是效率最高的。
3)innodb_flush_log_at_trx_commit=o
为0时,master thread中每1秒进行一次重做日志的fsync操作,因此实例crash最多丢失1秒钟内的事务。( master thread是负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性)
数值o的话,是一种折中的做法,它的IO效率理论是高于1的,低于2的,这种策略也有丢失数据的凤险,也无法保证D。
7、几个重要配置
1)innodb_log_files_in_group:指明redo log file的个数,命名方式如: ib_logfile0,iblogfile....iblogfilen。默认2个,最大100个。

2)innodb_log_file_size:单个redo log文件设置大小,默认值为48M。最大值为512G,注意最大值指的是整个redo log.系列文件之和,即(innodb_log_files_in_group * innodb_log_file_size)不能大于最大值512G。

8、redo日志刷盘过程
每次刷盘redo log 记录到日志文件组中,write pos位置就会后移更新。每次MySQL加载日志文件组恢复数据时,会清空加载过的redo log记录,并把 checkpoint后移更新。write pos和checkpoint之间的还空着的部分可以用来写入新的redo log记录。
如果write pos追上 checkpoint,表示日志文件组满了,这时候不能再写入新的redo log记录,MysQL得停下来,清空一些记录,把 checkpoint推进一下。

边栏推荐
- 商业智能BI业务分析思维:现金流量风控分析(一)营运资金风险
- MySql index learning and use; (I think it is detailed enough)
- 第一次性能测试实践,有“亿”点点紧张
- 包拉链不可用,但是是被另一个包。
- 运维监控系统之Open-Falcon
- Ice Scorpion V4.0 attack, security dog products can be fully detected
- 达梦8数据库导出导入
- This year's Qixi Festival, "love vegetables" are more loving than gifts
- DEJA_VU3D - Cesium功能集 之 057-百度地图纠偏
- YYGH-13-客服中心
猜你喜欢

The most effective seven performance testing techniques of software testing techniques
![Spark Basics [Introduction, Getting Started with WordCount Cases]](/img/90/ebe887db0f8c36895691dea05f62cf.png)
Spark Basics [Introduction, Getting Started with WordCount Cases]

新人如何入门和学习软件测试?

UE4 opens doors with overlapping events

Leading the highland of digital medicine, Zhongshan Hospital explores to create a "new paradigm" for future hospitals

商业智能BI业务分析思维:现金流量风控分析(一)营运资金风险

public static
List asList(T... a) What is the prototype? 
数据库设计的酸(ACID)碱(BASE)原则

阿里本地生活单季营收106亿,大文娱营收72亿,菜鸟营收121亿

事件解析树Drain3使用方法和解释
随机推荐
You may use special comments to disable some warnings. Three ways to report errors
包拉链不可用,但是是被另一个包。
Swing有几种常用的事件处理方式?如何监听事件?
UE4 opens doors with overlapping events
burp安装及代理设置
Detailed and comprehensive postman interface testing practical tutorial
DEJA_VU3D - Cesium功能集 之 059-腾讯地图纠偏
Web3.0 Dapps - the road to the future financial world
[极客大挑战 2019]FinalSQL
Haproxy搭建Web群集
Thinking (88): Use protobuf custom options for multi-version management of data
Redis key basic commands
How to discover a valuable GameFi?
Walter talked little knowledge | "remote passthrough" that something
Common open source databases under Linux, how many do you know?
【8.1】代码源 - 【第二大数字和】【石子游戏 III】【平衡二叉树】
UI自动化测试 App的WebView页面中,当搜索栏无搜索按钮时处理方法
开发Hololens遇到The type or namespace name ‘HandMeshVertex‘ could not be found..
BI业务分析思维:现金流量风控分析(二)信用、流动和投资风险
【8.2】代码源 - 【货币系统】【硬币】【新年的问题(数据加强版)】【三段式】