MySQL日志之redolog详解【带你了解redolog的使命和使用】_小道仙97的博客-程序员信息网_redolog的作用

技术标签: redolog  mysql  innodb  数据库  日志  # MySql  

https://www.bilibili.com/video/BV11Z4y1X7Kg


在前面的文章里面也大致讲过redolog,小伙伴们可以先回顾下


一、redolog的概念

1-1、redolog的作用

MySQL在innodb引擎下,所做的增删改查都是先去buffer pool缓冲池(内存区域)里面操作,再通过种种情况去进行入盘(数据存入磁盘),因为增删改都是在内存操作,这样就存在系统异常导致数据丢失的情况,redolog就是为了解决系统异常导致内存修改丢失的问题


1-2、redolog如何保证数据不丢失

所有的操作都是以事物为单位的,在事物未执行完毕的时候数据库异常导致数据丢失是正常的,因为事物未提交成功。

在事物提交的时候,我们把redolog从内存刷入到磁盘中去,从而保证修改不丢失,如果入盘失败,那事物也将提交失败


1-3、既然总是要落盘?为什么不直接把修改更新到磁盘?

可能很多小伙伴和最初的我有一样的疑问,在提交事物的时候为什么不直接把我们的修改刷入磁盘,而是先去把redolog刷入磁盘呢?

之所以innodb在操作的时候要先去操作内存,而不是直接操作磁盘目的只有一个提高性能、提升速度

虽然redolog落盘的时候也是入磁盘,但它是顺序写入,而直接对磁盘上数据修改是随机写入,顺序写的速度要远远快于随机写。

看过之前文章的朋友应该知道,把数据从磁盘读入到内存它不是一条条数据读取,而是一页页(每页16k)的读取。一般一个事物操作的数据远远要小于这个16k。


1-4、redolog数据是如何存储的呢?

所有的入盘操作最后都会转成二进制,这个并不重要,你可以把redolog磁盘空间理解成下面这个图,带颜色的区域就是存储数据区域

在这里插入图片描述
如你所见,redolog存储空间就像一个圆,从头开始存储,存储满了就开始覆盖之前的数据。

当然实际上它不是一个圆,也是一块磁盘空间,当存储满了的时候就会覆盖之前的,所以用圆来形容它很贴切。


其实我觉得只需要了解上面这些就差不多的,但为了文章的完整性,下面对于redolog的存储进一步讲解。

一个事物里面大概率是有多个操作的,看过之前文章的小伙伴也知道,只有当事物提交的时候才会对redolog入盘操作,那在事物提交之前数据如何存储呢?

毫无疑问在这之前数据也是存储在内存中的,这块内存叫做 redolog buffer,可以通过 innodb_log_buffer_size 来进行配置。

innodb_log_buffer_size 的默认大小是16MB
在这里插入图片描述

分配的内存区域并不是一块大的区域,我们不停的去写入,然后刷入磁盘,而是把这块区域划分成了N个小的区域每个小区域512KB大小,取名为 redo log block,每个redo log block 里面还有一些细节,这里就不去讨论了。

之前我们讲buffer pool的时候,说到数据存在磁盘的时候是以16KB大小为一个单位叫数据页,存储到缓存的时候也是以这个大小,叫做缓存页。这个redo log block也是一样的,进行数据入盘的时候就把这个512KB整体刷入磁盘。

它具体进行入盘的时机有这么几个

  1. 当缓存内容大于全部空间一半的时候(默认大小16MB,一半就是MB)
  2. 后台有个线程定时每秒刷入磁盘
  3. 每个事物提交的时候
  4. MySQL关闭的时候

1-5、redolog和binlog的区别

  • redolog是属于innodb引擎,binlog属于mysql
  • redolog会覆盖之前的数据,而binlog会一直增长(可以设置过期时间)
  • redolog是用来防止mysql异常导致修改数据丢失,binlog是用来数据备份和主从节点数据同步的。
  • redolog是物理日志,记录的是“在某个数据页上做了什么修改”(数据页上某个偏移量的值);binlog是逻辑日志,记录的是这个语句的原始逻辑(sql、数据行)

二、redolog配置

2-1、缓存大小

innodb_log_buffer_size

默认大小 16MB


2-2、刷盘策略

innodb_flush_log_at_trx_commit

提交事物写入磁盘中,会根据这个配置的策略进行同步。

  • 0 提交事物的时候不会把redo log buffer 里的数据刷入磁盘
  • 1 提交事物的时候,必须把日志刷入磁盘中,可以严格保证数据不丢失 (默认且推荐策略)
  • 2 提交事物的时候,先把日志刷入磁盘文件对应的 os cache 缓存里,隔一段时间再把数据刷入磁盘

2-3、磁盘目录

 innodb_log_group_home_dir

这个就是配置redolog在磁盘存放位置,如果没有配置,默认在 datadir 配置下(这个datadir也是配置)
在这里插入图片描述

这里有个不知道是不是坑的坑,我在修改了innodb_log_group_home_dir之后,MySQL就启动失败了,找了半天,看日志发现下面的提示

在这里插入图片描述

2-4、文件个数

innodb_log_files_in_group

默认是2,命名规则 ib_logfilex

在这里插入图片描述



如果对你有帮助的话,可以关注我的微信公众号: 小道仙97

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Tomwildboar/article/details/122111449

智能推荐

第十章实验(二)除法溢出的问题_njutyangxiao的博客-程序员信息网

题目:进行不会产生溢出的处罚运算,被除数为dword型,除数为word型,结果为dword。参数:(ax)=dword型数据的低16位      (dx)=dword型数据的高16位      (cx)=除数返回:(dx)=结果的高16位      (ax)=结果的低16位      (cx)=余数应用举例:计算1000000/10(f4240h/0ah)解答:这里主要是运用公式X/N=int(H

STM32F103开发板学习概述 自学笔记_旭日初扬的博客-程序员信息网_www.prechin.net

一、论坛普中开源电子分享网:www.prechin.net二、STM32F103开发板概述

PKCS 7 PKCS10 PKCS12 个人信息交换语法 - 学习记录 2020/8/30_Seth423的博客-程序员信息网

研一PKCS 7PKCS7是加密信息传输语法标准,根据不同应用场景定义了5中不同的数据类型,以下是RSA实验室定义的部分asn.1语法,并不完整,所以不要当标准用!-- 0.ContentInfo --ContentInfo ::= SEQUENCE { contentType ContentType, content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL}ContentType ::= OBJECT INDETIFIER

git上拉取tag,识别最新tag在此版本上新增tag_weixin_30376323的博客-程序员信息网

通过shell 脚本自动获取最新tag,并输入最新版本后,推到git上# 拉取分支上现有的tagsgit fetch --tagsecho -e "所有tag列表"git tag -l -necho -e "${tagList}"#获取最新版本tagLatestTag=$(git describe --tags `git rev-list --tag...

蓝牙规范 Core v5.2 GAP 文档解读第5章 BR/EDR安全方面_nk3652的博客-程序员信息网

5 BR/EDR安全方面认证目的通用认证过程描述如何使用LMP-认证和LMP-配对进行认证,取决于是否存在链接密钥、是否允许配对。UI术语Bluetooth authentication过程条件本地设备在建立链路后发起认证,远程设备可能在链路建立期间或之后开启安全。安全模式下图是带有安全性的整个通道建立过程,包括Figure 5.3, Figure 5.4,和Figure 5.5中的步骤。一个设备可以同时支持两种安全模式:安全模式2(与不支持SSP的.

随便推点

【进大厂必学】3W字180张图学习Linux基础总结_我是程序员小贱的博客-程序员信息网

就不多说这段时间干啥去了吧,期间和很多的同学聊了天,有的童鞋已经开始工作,聊了聊工作上的事儿。有的是今年即将毕业的童鞋,有着自己的小目标,有的想尝试互联网,所以现在基本上都快进行二轮的复习了,有的同学备战公务员,凭着年轻这股劲儿向往自己理想的生活状态,无论怎么样,长路漫漫,走一步,算一步,每一步都算数。今天分享的这篇文章是 Linux 相关的基础知识,深一点的内容基本上没有,不过对于刚需小伙伴来说,也就够了,有时间的话,最好按照这些命令去试一试,敲一敲,这样记忆更加深刻。老规矩,先看目录,文章比较长,建

项目管理——软件文档分类简介_钛元素的博客-程序员信息网

如今,软件开发越来越复杂,软件功能也越来越丰富。而几乎所有成熟的商业软件,都是靠一个开发团队齐心协力的血汗结晶。“罗马不是一天建成的!”,当我们震撼于Microsoft Windows的惊世巨著的同时,也道听途说了微软公司软件工程是如何的完善规范。的确,集数百名员工几年的共同努力

区块链服务的四大应用场景,深度解读中!_weixin_33749242的博客-程序员信息网

5月8日,阿里云召开区块链服务(BaaS)商业化发布会,会上再次表明阿里云BaaS只做平台基础设施,并欢迎更多生态伙伴共创垂直行业解决方案。区块链技术具备不可篡改的分布式账本,确保了信息的透明与共享,从而使得商业活动中点对点之间建立信任、达成共识的成本大幅下降。阿里巴巴集团学术委员会主席曾鸣提到过,区块链提供了“网状协同”的底层技术支持,这是未来十年最重要的创新和价值创造的动力。发布会深度解读了供...

nodeJS学习(5) --- sublime Text3 安装使用_weixin_30457065的博客-程序员信息网

本节对对工具sublime Text3 的安装进行简介。主要参考网址:http://blog.csdn.net/sam976/article/details/52076271       http://www.cnblogs.com/tinyphp/p/3217457.html1.介绍所谓工欲善其事必先利其器,编码过程合理熟练使用工具是优秀程序员必备技能,在诸多工具...

AAPT2报错_Mr--liu的博客-程序员信息网

1,资源文件找不到(大概率),检查布局文件(文件报错看不到)2,android.enableAapt2=false(未遇到)3,gradle路径中文(未遇到)

内核启动(一)_安仔都有人用的博客-程序员信息网_linux m_show /proc/kallsyms

内核启动(一)前面大致浏览了一下,uboot的流程。从感性上面理解了uboot的启动加载过程。接下来就是解惑内核的启动流程了。同样的手上有mini2440开发板,因此,就对linux-2.6.32.2进行解析。从编译开始因为uboot使用的是uImage,所以,直接使用如下的命令,查看整个编译流程.make uImage -n得到部分输出如下:...<省略部分>echo ' LD vmlinux'; arm-linux-ld -EL -p --no-undef

推荐文章

热门文章

相关标签