redo日志(下)


title: “redo日志(下)”
createTime: 2022-03-06T15:52:41+08:00
updateTime: 2022-03-06T15:52:41+08:00
draft: false
author: “ggball”
tags: [“mysql”]
categories: [“db”]
description: “”

redo log的刷盘时机

  • log buffer 空间不足时(大概一半左右)
  • 事务提交时
  • 后台线程不停的刷刷刷(大概每秒刷一次)
  • 正常关闭服务器时
  • 做所谓的 checkpoint

redo日志文件组

磁盘上的 redo 日志文件不只一个,而是以一个 日志文件组 的形式出现的

image-20220302114025504

MySQL 的数据目录(使用 SHOW VARIABLES LIKE ‘datadir’ 查看)下默认有两个名为 ib_logfile0ib_logfile1的文件, log buffer 中的日志默认情况下就是刷新到这两个磁盘文件中。如果我们对默认的redo 日志文件不满意,可以通过下边几个启动参数来调节:

innodb_log_group_home_dir

该参数指定了 redo 日志文件所在的目录,默认值就是当前的数据目录。

innodb_log_file_size

该参数指定了每个 redo 日志文件的大小,在 MySQL 5.7.21 这个版本中的默认值为 48MB

innodb_log_files_in_group

该参数指定 redo 日志文件的个数,默认值为2,最大值为100。

总共的 redo 日志文件大小其实就是: innodb_log_file_size × innodb_log_files_in_group 。

redo日志文件格式

我们前边说过 log buffer 本质上是一片连续的内存空间,被划分成了若干个 512 字节大小的 block 。将logbuffer中的redo日志刷新到磁盘的本质就是把block的镜像写入日志文件中,所以 redo 日志文件其实也是由若干个 512 字节大小的block组成。redo 日志文件组中的每个文件大小都一样,格式也一样,都是由两部分组成:

  • 前2048个字节,也就是前4个block是用来存储一些管理信息的。
  • 从第2048字节往后是用来存储 log buffer 中的block镜像的。

所以每次一开始写都是重ib_logfile的2048字节处开始写

image-20220302115109895

解释ib_logfile的前4个block

image-20220302115350722

log file header

描述redo日志文件的整体信息。

image-20220302115538544

包括以下属性(有印象就好)

属性名长度(单位:字节)描述
LOG_HEADER_FORMAT4redo 日志的版本,在 MySQL 5.7.21 中该值永远为1
LOG_HEADER_START_LSN8标记本 redo 日志文件开始的LSN值,也就是文件偏移量为204字节初对应的LSN值(关于什么是LSN我们稍后再看哈,看不懂的先忽略)。
LOG_HEADER_CREATOR32一个字符串,标记本 redo 日志文件的创建者是谁。正常运行时该值为 MySQL 的版本号,比如: “MySQL 5.7.21” ,使用mysqlbackup 命令创建的 redo 日志文件的该值为 “ibbackup” 和创建时间。
LOG_BLOCK_CHECKSUM4本block的校验值,所有block都有,我们不关心
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值