redo日志文件格式(3)—mysql进阶(六十一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: redo日志文件格式(3)—mysql进阶(六十一)

前面我们说了修改一条数据总不能吧16kb的页全部持久化到磁盘上,于是有了redo日志,记录哪些修改的数据,redo日志也有自己的缓存区,并不是直接把数据记录到磁盘上,缓存区是innoDB_redo_buffer_size,默认是16mb,为了保证原子性,他会分为不同的组,当乐观插入的时候,只有一条数据需要插入,则type的第一个字节是1,代表只有一条插入,当悲观插入多条插入的时候,会有一个MLOG_MULTI_REC_END的日志,表示这组记录完毕,若系统宕机重启,解析redo日志时候,没有解析到这个,则前面解析的全部放弃。

redo log-Transaction(2)—mysql进阶(六十)

 

Redo日志刷盘时机


我们前面说了mtr运行过程中产生一些redo日志,在mtr结束的时候会复制到log buffer中,可也不能一直在内存中,什么时候刷新到磁盘呢。

Log buffer空间不足的时候:

Log buffer大小是有限的,如果一直塞进去肯定会被填满,innoDB大叔认为如果写入log buffer的redo填满占了大约一半的时候,就需要持久化到磁盘上。

事务提交时候:

我们之前说过使用redo日志主要占用空间小,还是顺序写入,在事务提交时候,可以不吧buffer pool修改的数据刷新到磁盘上,但为了保证持久性,必须把这些redo日志刷新到磁盘上。

后台有个线程:

后台有个线程,大约每秒都会刷新一次log buffer 到磁盘。

正常关闭服务器:

做所谓的checkpoint时,也会刷新到磁盘。

其他一些情况。。

 

Redo日志文件组


Mysql的数据目录,用show variables like ‘datadir’查看,可以看到两个ib_logfile0和ib_logfile1的文件,log buffer中的日志默认就是刷新到磁盘上的这两个文件中。如果想修改redo文件,可以通过几个启动参调节:

Innodb_log_group_home_dir:该参数指定redo文件所在目录,默认就是在当前数据目录。

Innodb_log_file_Size:指定每个redo日志文件大小,在mysql5.7.21这个版本默认值是48M。

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

所以从上可以看到,磁盘的redo日志文件不只一个,而是以日志文件组的形式出现。当redo日志刷新到磁盘时候,先刷新到ib_logfile0然后就是1,2,如果满了,就继续循环从0开始记录。

所以总的redo日志大小就是innodb_log_file_size * innodb_log_file_in_group

 

Redo日志文件格式


我们前面说过log buffer本质是个连续空间,划分若干个512字节的block。将log buffer中的redo日志刷新到磁盘本质就是把block刷新到磁盘,所以磁盘上的redo日志文件也是由各种512字节的block组成。

Redo日志文件组每个文件大小一样,格式一样,由两个部分组成:

前2048个字节,也就是前4个block存一些管理信息。

从2048个字节之后开始,开始存log buffer 的block镜像。

所以前面说循环存储redo日志是从2048个字节开始算。

前面我们说过普通的block组要就是三个部分,log block header,log block body,log block trailder三个部分。下面介绍下4个存储管理信息的block。

1、Log file header:描述redo日志文件的整体信息。

这里面包含着五个参数:

A、log_header_format:4个字节,redo日志版本,在mysql5.7.21中永远为1.

B、Log_header_pad1:4个字节,做字节填充中。

C、Log_header_start_lsn:8个字节,标记redo日志文件开始的LSN值,也就是文件偏移量的2048个字节对应的LSN值。

D、Log_header_cheator:32个字节,一个字符串,标记redo日志创建者是谁。正常运行时该值是mysql版本号,比如MySql5.7.21,使用mysqlbackup命令创建redo日志文件的该值为“ibbackup”和创建时间。

E、Log_block_checksum:4个字节,block的效验值。

注意,mysql对block格式经常修改,如果阅读其他书籍发现不一样,可能因为版本不同。

2、checkpoint1:记录关于checkpoint的一些属性:

这里面也包含五个参数:

A、log_checkpoint_no:8个字节,服务器做checkpoint的编号,每次有新的就加1.

B、Log_checkpoint_lsn:8个字节,服务器做checkpont结束时对应的LSN值,系统崩溃从这个值开始。

C、Log_checkpoint_offset:8个字节,上个属性的LSN值在redo日志偏移量。

D、Log_checkpoint_log_buffer_size:8个字节,服务器在做checkpoint操作时对应的log buffer大小。

E、Log_block_checksum:4个字节,block的效验值。

第三个参数未使用,忽略。

第三个参数checkpoint2和上面的checkpoint1一样。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
173 6
|
8月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
359 23
|
9月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
9月前
|
数据库 文件存储 数据安全/隐私保护
YashanDB redo日志文件管理
YashanDB的redo日志文件用于记录数据库物理日志,支持宕机重演和主备复制。 redo日志有4种状态:NEW(新创建)、CURRENT(当前写入)、ACTIVE(未归档或未写盘)和INACTIVE(可复用)。可通过V$LOGFILE视图或直接查看$YASDB_DATA/dbfiles目录来管理redo日志。此外,支持添加、切换和删除redo日志以优化性能或应对磁盘故障等情况,但需注意仅能删除INACTIVE或NEW状态的日志以确保数据安全。
|
10月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1267 0
|
4月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
420 158
|
4月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
931 152
|
4月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
771 156
|
4月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
388 156

推荐镜像

更多