新特性解读 | MySQL 8.0 在线调整 REDO

MySQL 8.0 在线修改redo log 容量 MySQL redo log记录数据记录变更,以及未数据一致性恢复提供保障。在运维MySQL 过程中,很多DBA 会遇到调整redo log 和redo buffer size 大小的需求,然而修改redo log 文件大小需要重启,用户体验不好。不过 MySQL 8.0.30 版本中提供动态调整redo log 文件大小的功能。本文将介绍MySQL 8.0.30 版本中redo log 有哪些改变。... 阅读详情

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


MySQL 最新版本 8.0.30 的发布带来一个与 REDO 日志文件有关的新功能点: 在线调整 REDO 日志文件的大小!极大的简化了运维的工作量(经历过的同学都懂)!

通常一台 MySQL 实例部署完后,REDO 日志文件大小一般不会保持默认值,DBA 同学会根据数据的写入量以及频率来调整其为合适的值。与业务匹配的 REDO 日志文件大小能让数据库获得最佳的性能(如何让 REDO 日志文件的大小匹配现有业务不在本篇讨论范围)。

下面对 MySQL 8.0.30 之前以及之后的版本,对比 REDO 日志文件的更改过程,体验下最新版本的易用性。

8.0.30 之前,如何更改 REDO 日志文件大小?

针对这些版本,修改 REDO 日志文件大小的步骤比较繁琐。假设需要更改其大小为 2G ,步骤如下:

1、 REDO 日志文件的更改涉及两个传统参数:其最终大小是这两个参数的值相乘。

(1) innodb_log_files_in_group: REDO 日志磁盘上的文件个数,默认为2。

(2) innodb_log_file_size: REDO 日志磁盘上单个文件的大小,默认为48M。

(3)当前的日志大小为单个48M,两个组,也就是一共96M。

root@ytt-large:~/sandboxes/msb_5_7_34/data# ls -sihl ib_logfile*
3277012  48M -rw-r----- 1 root root  48M 7月  29 16:18 ib_logfile0
3277013  48M -rw-r----- 1 root root  48M 7月  29 16:18 ib_logfile1
2、“关闭”快速停实例参数:innodb_fast_shutdown = 0 以确保 InnoDB 刷新所有脏页到磁盘(需要了解此参数的其他值请参见官方手册):
<mysql:(none):5.7.34-log>set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
3、等步骤二执行完后,停掉MySQL实例。
4、删掉数据目录下旧日志文件:
root@ytt-large:~/sandboxes/msb_5_7_34/data# rm -rf ib_logfile*
5、在配置文件 my.cnf 里修改参数 innodb_log_file_size ,由于有两个组,设置这个参数为 1G 即可。
[mysqld]
innodb_log_file_size=1G
6、启动 MySQL 实例(如果没有报错,代表更改成功)。
7、查看新的日志文件大小:
root@ytt-large:~/sandboxes/msb_5_7_34/data# ls -sihl ib_logfile*
3277898 1.1G -rw-r----- 1 root root 1.0G 7月  29 16:31 ib_logfile0
3277923 1.1G -rw-r----- 1 root root 1.0G 7月  29 16:31 ib_logfile1
8.0.30 之后,如何更改 REDO 日志文件大小?

最新版本 MySQL 8.0.30 发布后,使用新参数innodb_redo_log_capacity来代替之前的两个参数(目前设置这两个参数依然有效)。使用新参数调整大小非常简单,直接设置为要调整的值就行。比如调整其大小为2G:

调整之前,默认100M:

<mysql:(none):8.0.30>select @@innodb_redo_log_capacity;
+----------------------------+
| @@innodb_redo_log_capacity |
+----------------------------+
|                  104857600 |
+----------------------------+
1 row in set (0.00 sec)

调整其大小为2G:

<mysql:(none):8.0.30>set persist innodb_redo_log_capacity=2*1024*1024*1024;
Query OK, 0 rows affected (0.20 sec)

新增对应的状态变量innodb_redo_log_capacity_resized,方便在 MySQL 侧监控当前 REDO 日志文件大小:

<mysql:(none):8.0.30>show status like 'innodb_redo_log_capacity_resized';
+----------------------------------+------------+
| Variable_name                    | Value      |
+----------------------------------+------------+
| Innodb_redo_log_capacity_resized | 2147483648 |
+----------------------------------+------------+
1 row in set (0.00 sec)

同时磁盘文件的存储形式不再是类似 ib_logfileN 这样的文件,而是替代为 #ib_redoN 这样新文件形式。这些新的文件默认存储在数据目录下的子目录’#innodb_redo’ 里。

1、这样的文件一共有32个,按照参数 innodb_redo_log_capacity 来平均分配。

root@ytt-large:/var/lib/mysql/#innodb_redo# ls |wc -l
32

2、有两类文件:一类是不带 _tmp 后缀的,代表正在使用的日志文件;带 _tmp 后缀的代表多余的日志文件,等正在使用的文件写满后,再接着使用它。如下所示: 正在使用的日志文件有15个,未使用的有17个。

root@ytt-large:/var/lib/mysql/#innodb_redo# ls | grep -v '_tmp' |wc -l
15
root@ytt-large:/var/lib/mysql/#innodb_redo# ls | grep '_tmp' |wc -l
17

同时 performance_schema 库里新增表innodb_redo_log_files:获取当前使用的 REDO 日志文件 LSN 区间、实际写入大小、是否已满等统计数据。例如当前15个 REDO 日志文件的统计数据如下:一目了然!

<mysql:performance_schema:8.0.30>select * from innodb_redo_log_files;
+---------+---------------------------+------------+------------+---------------+---------+----------------+
| FILE_ID | FILE_NAME                 | START_LSN  | END_LSN    | SIZE_IN_BYTES | IS_FULL | CONSUMER_LEVEL |
+---------+---------------------------+------------+------------+---------------+---------+----------------+
|       7 | ./#innodb_redo/#ib_redo7  |  552208896 |  619315712 |      67108864 |       1 |              0 |
...
|      21 | ./#innodb_redo/#ib_redo21 | 1491704320 | 1558811136 |      67108864 |       0 |              0 |
+---------+---------------------------+------------+------------+---------------+---------+----------------+
15 rows in set (0.00 sec)

总结:

MySQL 8.0 新版本带来越来越多的功能点,来简化开发和运维的工作,如果可能请尽快升级吧。

MySQL 8.0.30新参数innodb_redo_log_capacity怎么用?手把手教你在线调整Redo Log大小 本文详细解析MySQL 8.0.30新参数innodb_redo_log_capacity的实战应用,教你如何在线动态调整Redo Log大小以优化数据库性能。通过新旧参数对比、生产环境实操指南及异常处理方案,帮助DBA快速掌握这一关键特性,提升MySQL在高并发场景下的稳定性与吞吐量。 阅读详情

相关推荐

Innodb之redo日志

​ 通过redo log buffer和redo log文件的配合使用,InnoDB能够保证即使在数据库系统崩溃的情况下,所有已提交的事务修改都不会丢失,实现了数据库的crash-safe能力。​ redo log buffer是InnoDB存储引擎中关键的组成部分,它通过缓冲和优化日志写入操作,既提升了数据库的性能,又确保了数据的安全性和一致性。​ 在MySQL数据库中,binlog(二进制日志)和redo log(重做日志)都是关键的日志系统,但它们服务于不同的目的,具有不同的特性和工作机制。

qq_36211262的博客 1209

8.0 新特性 - innodb_redo_log_capacity

为了取得更好的读写性能,InnoDB 会将数据缓存在内存中(InnoDB Buffer Pool)对磁盘数据的修改也会落后于内存,这时如果进程或机器崩溃,会导致内存数据丢失,为了保证数据库本身的一致性和持久性,InnoDB 维护了 REDO LOG。

分享既学习 4515

py_innodb_page_info工具

使用py_innodb_page_info 查看分析各种log以及data file,深入研究mysql的存储引擎底层原理与实现。 mysql innodb undo redo

InnoDB重做日志架构和innodb_redo_log_capacity系统变量(译文)

从MySQL 8.0.30开始,InnoDB的重做日志架构发生了重大变化,重做日志文件被固定为32个,并存放在一个专门的目录下面,用户可以使用系统变量innodb_redo_log_capacity在线修改重做日志容量,原来的innodb_log_files_in_group和innodb_log_file_size两个系统变量已经废弃。

姚远OracleACE的博客 4945

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3916

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 704

MySQL 8.0 新特性汇总

MySQL 5.7 在 2023 年 10 月 31 日起,已经终止软件生命周期了,意味着 MySQL 官方将不再提供对 MySQL 5.7 版本的技术支持和更新。8.0 版本成为官方长期支持版本,提供了很多新特性,本文将详细解读 MySQL 8.0 版本的新特性,为 MySQL 版本升级作参考和指导。MySQL 8.0 相比 5.7 版本更新很多新特性,很多改变没有直接删除,便于用户过渡,兼容性还是比较高的。不过到 8.1、8.2 的创新版本,老的 5.7 的参数和语法就已经删除。

1844

Nordic nRF52832实战:手把手教你搭建智能手环BLE通信框架(附完整代码)

本文详细介绍了如何使用Nordic nRF52832芯片搭建智能手环的BLE通信框架,涵盖芯片优势、协议栈初始化、低功耗广播策略及健康数据服务实现。通过完整代码示例和架构设计,帮助开发者快速掌握蓝牙低功耗通信技术,适用于可穿戴设备开发。

weixin_29192141的博客 246

MySQL 8.0 新特性解读(下)

作者:马文斌MySQL爱好者,任职于蓝月亮(中国)有限公司。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。上一篇主要讲了第一部分:功能增强,感兴趣的亲请点击【

meser88的博客 382

Go语言AI智能体开发实战:基于LangGraphGo构建下一代工作流引擎

在AI应用开发领域,工作流编排是构建复杂智能系统的核心技术。其核心原理是将任务执行过程建模为状态图,通过节点和边的组合定义数据流转路径,实现多步骤推理与工具调用的自动化。这种基于状态图的编程模型,为智能体提供了清晰的“思考-行动-观察”循环抽象,显著提升了复杂业务逻辑的可维护性和可观测性。从技术价值看,它解决了传统代码中状态分散、流程僵化的问题,支持条件分支、并行执行等高级模式,是实现生产级AI应用的关键基础设施。在应用场景上,该技术广泛适用于客服机器人、自动化审批、数据ETL等需要多步骤协调的领域。本文以

weixin_30457551的博客 360

人工智能(AI)简史:推动新时代的科技力量

人工智能(AI,Artificial Intelligence)是计算机科学的一个分支,旨在研究和开发可以模拟、扩展或增强人类智能的系统。它涉及多种技术和方法,包括机器学习、深度学习、自然语言处理(NLP)、计算机视觉、专家系统等。

qq_17153885的博客 1万+

MySQL问答200

本文涵盖MySQL全栈面试核心内容,包括:基础概念(关系型数据库特性、体系结构);存储引擎对比(InnoDB/MyISAM);索引原B+树、聚簇索引)与优化策略;事务ACID与隔离级别实现;锁机制(行锁、间隙锁)与MVCC原理;日志系统(redo/undo/binlog);SQL优化与执行计划分析;高可用方案(主从复制、分库分表);InnoDB底层机制(Buffer Pool、Checkpoint);以及MySQL 8.0新特性。

weixin_72753562的博客 827

华为OD技术面真题 - JAVA开发 - 1

汇总华为OD技术面八股JAVA八股,高频技术真题并提供详细解答。

qq_45776114的博客 1200

MySQL面试核心:从存储引擎、索引到事务隔离与性能优化深度解析

数据库索引是提升查询性能的核心技术,其底层通常采用B+树数据结构,通过多路平衡与有序链表特性,高效支持范围查询和排序操作,相比哈希表更适合业务常见场景。事务隔离级别是保证数据一致性的关键,InnoDB存储引擎通过MVCC(多版本并发控制)和间隙锁机制,在可重复读级别下有效解决了脏读、不可重复读和幻读问题,确保了高并发下的数据可靠性。理解这些基础原理,对于进行SQL优化、设计高性能数据库架构至关重要。本文以MySQL为例,深入探讨了InnoDB存储引擎特性、B+树索引的最左前缀原则、事务隔离级别的实现机制,以

weixin_30591551的博客 298

[SV]SystemVerilog中,系统函数$cast()的作用是什么?

摘要:SystemVerilog中的$cast()系统函数用于安全的动态类型转换,主要在类层次结构中将父类句柄转换为子类句柄(向下转换)。它通过运行时类型检查确保转换合法性,成功时返回1并赋值句柄,失败则返回0。这种机制使得可以通过父类句柄访问子类特有成员,在多态场景(如UVM验证)中尤为重要。使用时需检查返回值处理转换失败情况。$cast()比静态转换更安全,但不能用于无关类或基本数据类型间的转换。

元直的博客 1210

PINN求解PDE

PINN求解Dirichlet泊松方程 泊松方程引入 −Δu=f,x∈Ω=(0,1)2-\Delta u=f,x \in \Omega=(0,1)^2−Δu=f,x∈Ω=(0,1)2 u=g,x∈∂Ωu=g,x \in \partial \Omegau=g,x∈∂Ω import torch import time import numpy as np import matplotlib.pyplot as plt import torch.nn as nn def UU(X, order,prob):

forrestguang的博客 3804

数据库入门实战:从SQL卡顿到高可用的工程能力基线

数据库是现代应用的数据中枢,其核心在于平衡‘快、稳、省’三重目标。理解B+树索引如何影响ORDER BY与LIMIT执行路径、掌握MVCC与事务隔离级别的实际代价、识别主从复制与备份恢复中的脆弱环节,是开发者与运维人员必备的基础能力。本文聚焦MySQL等主流关系型数据库在真实生产环境中的关键决策点:复合索引设计、慢查询根因定位、连接池调优、物理备份+binlog时间点恢复,以及Orchestrator自动故障转移等工程实践。不讲抽象范式,只解‘为什么查得慢’‘为何一加索引就锁表’‘备份恢复为何耗时六小时’等

weixin_30470643的博客 463

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【信息科学与工程学】【数据科学】 第一百二十篇 数据库系统 系列二 OcenBase 01

bin/bash# ob-monitor.sh —— 三地五中心关键指标巡检# 建议放入 crontab: */1 * * * * /opt/ob/ob-monitor.sh# ① 副本健康: 5 副本必须全部在线thenecho "[$(date)] CRITICAL: 仅 $REPLICA_COUNT/5 Zone 活跃" >> $ALERT_LOGfi# ② Leader 分布: 应主要集中在城市 A 的 zone1/zone2。

weixin_49199313的博客 457

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL8.0.30在线调整redo

redo log的大小是固定的。redo log是Innodb引擎层实现的,并不是所有引擎都有。redo log采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。redo log适用于崩溃恢复(crash-safe)。

steven_cici的博客 1945

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据库学习案例-20240118-InnoDB重做日志架构和innodb_redo_log_capacity系统变量

说明:从MySQL 8.0.30开始,InnoDB的重做日志架构发生了重大变化,重做日志文件被固定为32个,并存放在一个专门的目录下面,。原文网址:https://lefred.be/content/dynamic-innodb-redo-log/ (有删节和修改)作者: Frédéric Descamps,Oracle公司MySQL社区经理,知名MySQL布道师。

oradbm的博客 647

innodb 01 redo 日志详解

redo 和binlog的区别。 1、二进制日志server层产生,redo是innodb层产生。并且binlog先于redolog被记录 2、binlog记录操作的方法是逻辑性的语句,基于行格式。redolog是innodb层产生的日志,记录数据库每个页的修改。 3、binlog是事务提交的时候,一次性写入,redolog是数据准备修改的时候写入redobuffer,然后才对缓存中数据操作。并且保证,事务提交时:redobuffer冲刷到磁盘 4、binlog是一次性写入,所以有顺序。redolog是物理

xizi_ghq的博客 648

MySQL 8.0.30动态redo log初探

MySQL 8.0.30全新的动态redo log玩法探秘MySQL从5.7版本开始支持在线动态修改 innodb_buffer_pool_size,8.0开始支持在线添加undo表空间,以及临时表空间的自动回收,真的是越来越方便了。从8.0.30开始,又新增支持动态调整redo log的大杀器,对DBA来说又是一大福音。在8.0.30里,新增选项 innodb_redo_log_capacity...

老叶茶馆 1265

innodb中的REDO解析

在innodb存储引擎中,事务日志通过重做(redo)日志文件和innodb存储引擎的日志缓冲(innodb log buffer)来实现;当开始一个事务时,会记录该事务的一个LSN(Log sequence number),当事务执行是,会往innodb存储引擎的缓冲池里插入事务日志,当事务提交是,必须将innodb粗才能引擎的日志缓冲写入磁盘(默认的实现,即innodb_flush_log_a

疯狂的石头 2031

MySQL 知识点分享三:MySQL的8种日志和相关参数

MySQL的8种日志 重做日志 回滚日志(undo log) 二进制日志(binlog) 错误日志(errorlog) 慢查询日志(slow query log) 通用查询日志(general log) 中继日志(relay log) DDL日志(metadata log)

贺浦力特的博客 1047

InnoDB事务日志(redo log 和 undo log)详解

数据库通常借助日志来实现事务,常见的有undo log、redo log,undo/redo log都能保证事务特性,undolog实现事务原子性,redolog实现事务的持久性。 为了最大程度避免数据写入时io瓶颈带来的性能问题,MySQL采用了这样一种缓存机制:当query修改数据库内数据时,InnoDB先将该数据从磁盘读取到内存中,修改内存中的数据拷贝,并将该修改行为持久化到磁盘上的事务日志(先写redo log buffer,再定期批量写入),而不是每次都直接将修改过的数据记录到硬盘内,等事务日志持

wangrenhaioylj的博客 843

MySQL 8.0.32 双写参数和innodb_redo

版本为mysql 8.0.32。

青春作伴,爱情最好 1564
上一篇: 新特性解读 | MySQL 8.0 GIPK 不可见主键
下一篇: 故障分析 | MySQL Router:服务器后端那么闲,为什么不让访问?
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值