MySQL 8.0 开关 Redo Logging

一 前言

前几天有客户测试使用云数据库的时候提出 要禁止mydumper 关闭redo log的操作 (说白了就是导入数据时保持MySQL 实例的redo logging功能), 这才想起 在 MySQL 8.0.21 版本中,开启了一个新特性 “Redo Logging 动态开关”

在新实例导数据的场景下,通过关闭 redo logging ,写入操作的事务可以跳过记录 redo日志和 doublewrite buffer,从而加快导入数据的速度。但是也有负面作用付出的代价是短时间牺牲了数据库的ACID保障。

官方文档特别强调该功能不能使用在生产环境,仅仅用于新实例的加速 数据导入,不知道客户之前经历了什么,特别强调支不支持禁用这个功能。

官方文档如是说:

As of MySQL 8.0.21, you can disable redo logging using the 
ALTER INSTANCE DISABLE INNODB REDO_LOG statement. 
This functionality is intended for loading data into a new MySQL instance. 

既然官方说了不建议在生产库使用,我们就学习一下吧,万一以后用的着呢。。

二 介绍

2.1

为了支持 redo logging 开关功能 ,MySQL 增加新的 SQL语法:

ALTER INSTANCE {ENABLE/DISABLE } INNODB REDO_LOG。

具备 INNODB_REDO_LOG_ENABLE 权限的用户,才能被允许执行 Redo Logging 动态开关的操作,所以如果需要禁用该操作,可以通过控制用户的权限,云数据库实例应该不会开放该权限,但是自建的数据库的 具有super权限的用户就不好控制了。

新增状态值 Innodb_redo_log_enabled ,用于显示当前 Redo Logging 开关状态。

2.2 纸上来得终觉浅

为用户赋权

GRANT INNODB_REDO_LOG_ENABLE ON . to the_bad_gay;

关闭redo logging

检查redo logging是否成功关闭

导数据

重新开启redo logging

ALTER INSTANCE ENABLE INNODB REDO_LOG;

确认redo logging状态

SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';

2.3 使用限制
  1. 开关 Redo Logging 执行过程中获取 排他模式的 backup metadata lock,故不支持其他并发的 ALTER INSTANCE 操作;

  2. Redo logging关闭状态下,不支持cloning operations和redo log archiving这两个功能;

  3. Redo logging关闭状态下,支持正常流程的关闭和重启实例;但在异常宕机情况下,可能会导致丢数据和页面损坏;Redo logging关闭后异常宕机的实例需要废弃重建,直接重启会有如下报错:

    [ERROR] [MY-013578] [InnoDB] Server was killed when Innodb Redo logging was disabled. Data files could be corrupt. You can try to restart the database with innodb_force_recovery=6.

三 总结:

写这篇文章的时候,搜集了一下 资料发现, mydumper 紧跟 MySQL 8.0 的技术发展,再新的版本中 增加了新的参数 --disable-redo-log Disables the REDO_LOG and enables it after, doesn't check initial status.

对于客户的诉求,我估计是有人在生产库使用 mydumper 导入数据时,加上了上面的参数,导致了一些列的故障。

学习新技术,用不好的话, 也不是什么好事儿。 have fun with your MySQL instance

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IPC通信--消息队列】

消息队列(也叫做报文队列)是一个消息的链表。可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息…

linux删除操作,删除文件夹,删除文件夹下面所有文件,删除文件,删除文件中内容等命令

在Linux中&#xff0c;你可以使用以下命令来执行删除操作&#xff1a; 删除文件夹&#xff1a; rm -r <文件夹路径>例如&#xff0c;要删除名为"folder"的文件夹&#xff0c;可以运行&#xff1a; rm -r folder删除文件夹下的所有文件&#xff1a; rm -r <文…

Debezium发布历史54

原文地址&#xff1a; https://debezium.io/blog/2019/04/18/hello-debezium/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 的团队不断壮大 2019 年 4 月 18 日 作者&#xff1a; 克里斯克兰福德 社…

Django5+DRF序列化

概述 本教程将介绍如何创建一个简单的粘贴板代码高亮 Web API。在此过程中&#xff0c;它将介绍构成 REST 框架的各种组件&#xff0c;让你全面了解所有组件是如何组合在一起的。 本教程相当深入&#xff0c;因此在开始学习之前&#xff0c;你可能需要先吃一块饼干&#xff0…

eval() 函数的理解

eval() 函数是 Python 内置的一个函数&#xff0c;它用于执行以字符串形式表示的 Python 表达式。它将字符串当作有效的 Python 表达式进行解析和执行&#xff0c;并返回表达式的结果。 语法&#xff1a; eval(expression, globalsNone, localsNone)expression: 要被解析和执…

[C#]Onnxruntime部署Chinese CLIP实现以文搜图以文找图功能

【官方框架地址】 https://github.com/OFA-Sys/Chinese-CLIP 【算法介绍】 在当今的大数据时代&#xff0c;文本信息处理已经成为了计算机科学领域的核心议题之一。为了高效地处理海量的文本数据&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术应运而生。而在诸多N…

电子实验室设备:从零开始配置实验室(一)

本文译自 Electronics Lab Equipment: Kitting out a Lab from Scratch 随着多次国际迁徙以及在几家公司&#xff08;或其分支机构&#xff09;工作&#xff0c;尤其是在没有强大电子工程团队的情况下&#xff0c;我不得不为自己和客户设置多个电子实验室。那些计划进行内部测试…

什么是缓存、为什么要用缓存

缓存是将一些频繁需要访问的数据临时存储在高速存储器中&#xff0c;以便提高数据访问的速度和效率的一种技术。 使用缓存的原因主要有以下几点&#xff1a; 提高访问速度&#xff1a;缓存可以将数据存储在位于CPU或内存之间的高速存储器中&#xff0c;相比于从硬盘或网络中读…

人教版初中数学八年级上册“阅读与思考”《数据波动程度的几种度量》教学设计

教学目标 1. 了解方差、极差、标准差、平均差的定义和计算公式。 2. 会用方差、极差、标准差、平均差计算公式来比较两组数据的波动大小。 3.经历探索方差、极差、标准差、平均差公式的形成过程和应用过程。 重难点分析 教学重点&#xff1a;体会数据波动中几种程度的度量…

gin使用jwt登录验证

使用github.com/dgrijalva/jwt-go包,gihub地址:https://github.com/dgrijalva/jwt-go 安装包 go get -u github.com/dgrijalva/jwt-go简单封装生成token、验证token有效、通过Authorization解析token三个函数 models/jwt.go package modelsimport ("net/http"&quo…

HCIA-Datacom题库(自己整理分类的)_08_FTP协议【8道题】

一、单选 1.在使用FTP协议升级路由器软件时&#xff0c;传输模式应该选用___ 二进制模式 字节模式 文字模式 流字节模式 解析&#xff1a;二进制模式&#xff1a;在数据连接中传输&#xff0c;不对数据进行任何处理&#xff0c;不需要转换或格式化就可以传输字符。 2.以…

网页设计与制作web前端设计html+css+js成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站(HTML静态网页项目实战)附源码】

网页设计与制作web前端设计htmlcssjs成品。电脑网站制作代开发。vscodeDrea 【企业公司宣传网站&#xff08;HTML静态网页项目实战&#xff09;附源码】 https://www.bilibili.com/video/BV1Hp4y1o7RY/?share_sourcecopy_web&vd_sourced43766e8ddfffd1f1a1165a3e72d7605

【C++】STL 算法 ⑥ ( 二元谓词 | std::sort 算法简介 | 为 std::sort 算法设置 二元谓词 排序规则 )

文章目录 一、二元谓词1、二元谓词简介2、 std::sort 算法简介3、 代码示例 - 为 std::sort 算法设置 二元谓词 排序规则 一、二元谓词 1、二元谓词简介 " 谓词 ( Predicate ) " 是一个 返回 布尔 bool 类型值 的 函数对象 / 仿函数 或 Lambda 表达式 / 普通函数 , …

逆置算法和数组循环移动算法

元素逆置 概述&#xff1a;其实就是将 第一个元素和最后一个元素交换&#xff0c;第二个元素和倒数第二个元素交换&#xff0c;依次到中间位置。用途&#xff1a;可用于数组的移动&#xff0c;字符串反转&#xff0c;链表反转操作&#xff0c;栈和队列反转等操作。 逆置图解 …

2024年1月7日15:09:50

2024年1月7日15:09:55复习&#xff1a;我今天学了有价值的东西&#xff0c;那就是在瓦罗兰特拿到了三杀 2024年1月7日15:11:10学习了如何使用vivopad2的键盘 可以稍微用一下 2024年1月7日15:17:58 学习一个编程的题目 2024年1月7日15:31:27不用机械键盘打字效率就是比不用低…

深入理解堆(Heap):一个强大的数据结构

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 前言堆的实现基本操作结构体定义初始化堆&#xff08;HeapInit&#xff09;销毁堆&#xff08;HeapDestroy&#xff09; 重要函数交换函数&#xff08;…

Talk | EMNLP 2023 最佳长论文:以标签为锚-从信息流动的视角分析上下文学习

本期为TechBeat人工智能社区第561期线上Talk。 北京时间1月4日(周四)20:00&#xff0c;北京大学博士生—王乐安的Talk已准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “以标签为锚-从信息流动的视角分析上下文学习”&#xff0c;介绍了他的团队在上下文学…

STM32深入系列02——BootLoader分析与实现

文章目录 1. STM32程序升级方法1.1 ST-Link / J-link下载1.2 ISP&#xff08;In System Programing&#xff09;1.3 IAP&#xff08;In Applicating Programing&#xff09;1.3.1 正常程序运行流程1.3.2 有IAP时程序运行流程 2. STM32 Bootloader实现2.1 方式一&#xff1a;Boo…

Qt/QML编程学习之心得:Linux下Thread线程创建(26)

GUI设计中经常为了不将界面卡死,会用到线程Thread,而作为GUI设计工具,Qt也提供了一个这样的类,即QThread。 QThread对象管理程序中的一个控制线程。线程QThread开始在run()中执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。 也可以通过…

Java泛型中的T,R,K,V,E:一探究竟

Java的泛型&#xff0c;作为一种强大的编程工具&#xff0c;让代码更具复用性&#xff0c;同时避免了类型转换的繁琐操作。在使用泛型时&#xff0c;我们经常会遇到一些特定的类型参数符号&#xff0c;如T、R、K、V、E等。那么这些符号代表的是什么呢&#xff1f;下面&#xff…