mysql日志( Redo Log 、Undo Log、Bin Log)
InnoDB是一个带有ACID事务支持的存储引擎,其中redo log和undo log是其实现原子性、一致性、隔离性和持久性(ACID)的重要机制。
Redo Log(重做日志)
Redo log主要用于实现事务的持久性。它记录了后续可以用来恢复数据的“重做”操作。如果数据库崩溃,可以使用redo log记录复现完整的数据修改过程。Redo日志关注的是数据页的物理修改,并且这些记录是在事务提交之前写入的。通常,这些日志按照先后顺序被连续地写入到日志文件,这减少了IO操作的随机性,有助于提高性能。
Redo日志文件通常作为一个循环使用的日志组维护,一个文件满了之后就会滚动到下一个,形成一个循环。一旦数据被安全地写入到磁盘上的表里,相关的redo日志就可以被重用。
Undo Log(撤销日志)
Undo log主要用于实现事务的原子性和一致性。它记录了可以用来撤销每一个操作的信息。如果一个事务部分完成就失败或者被中止了,数据库将利用undo log来回滚事务对数据的修改,确保数据库能够返回到事务开始之前的一致状态。
Undo日志还用于实现事务的隔离性。在可重复读(REPEATABLE READ)和读已提交(READ COMMITTED)隔离级别中,读取操作需要访问事务开始之前的数据版本。如果在事务中修改了数据,这些旧的数据版本可以通过undo记录来访问。Undo日志存储在undo表空间中,不断积累的undo日志会定期清理,例如当所有需要该记录的事务都完成的时候。
Redo和Undo工作流
在一个数据库事务的生命周期中,redo和undo log通常这样工作:
-
当事务开始时,它可能会读取一些数据并更新它们,这些更新实际上写入了内存中的数据页(并不直接写入磁盘)。
-
数据库将这些修改操作记录到undo log中,这样如果事务需要回滚,就可以恢复原先的数据。
-
同时,将修改操作也记录到redo log中。如果数据库系统崩溃,事务的修改可以通过redo操作重新应用。
-
当事务提交时,数据库确保所有的redo log都已经写入了磁盘。这种写前日志(write-ahead logging)的策略保证了即使数据库在此时崩溃,所有提交的事务的修改都不会丢失。
-
提交事务后,数据库还会继续将内存中更改过的数据页刷新到磁盘中,这个过程可以异步进行,不需要立即完成,因为重做日志已经安全写入。
-
清理阶段,事务完成后,如果undo log不再需要,它们将被删除。
重要的是要理解,redo log记录的是如何重做一个操作,而undo log记录的是如何撤销一个操作。Redo log在事务提交时写入磁盘保证了持久性,而undo log让事务可以回滚到任何之前的状态来保证原子性和一致性。两者组合保障了事务的完整性和数据库的稳定性。
Bin Log
binlog有三种日志格式
1. STATEMENT(基于语句的复制Statement-Based Replication, SBR): 每个数据库更改(如INSERT, UPDATE, DELETE)都会以SQL语句的形式记录在二进制日志文件中。
2. ROW(基于行的复制Row-Based Replication, RBR): 而不是记录SQL语句,基于行的格式会记录更改了哪些行以及这些行如何改变。它记录了每个更改的具体行和列的新值。
3. MIXED(混合格式Mixed-Based Replication, MBR): MySQL会智能地选择使用基于语句或基于行的复制格式。对于大多数语句,它使用基于语句的格式,因为这通常更有效(占用更少的空间并且在某些情况下复制更快)。然而,对于那些可能导致数据不一致的语句(例如,含有`NOW()`, RAND(), 或者用户定义的函数),它会使用基于行的格式。
`MIXED` 模式基本上是一个折中方案,它试图平衡基于语句的复制的效率和基于行的复制的一致性。在某些场景下,基于语句的复制可能会导致主从服务器之间的数据不一致,因为某些非确定性的函数可能在主服务器和从服务器上产生不同的结果。在这些情况下,使用 MIXED`模式可以确保复制的正确性,同时保持尽可能高的效率。
要在MySQL中设置复制格式,可以在配置文件 my.cnf(或 my.ini)中或通过命令行设置 binlog_format变量,
例如
[mysqld]
binlog_format=MIXED
或者动态设置:
SET GLOBAL binlog_format = MIXED;
务必记得,改变二进制日志格式会影响所有随后的数据更改事件,所以在生产系统中修改它之前需要仔细考虑,并保证主从数据库设置的一致性,避免复制错误。
相关文章:
mysql日志( Redo Log 、Undo Log、Bin Log)
InnoDB是一个带有ACID事务支持的存储引擎,其中redo log和undo log是其实现原子性、一致性、隔离性和持久性(ACID)的重要机制。 Redo Log(重做日志) Redo log主要用于实现事务的持久性。它记录了后续可以用来恢复数据…...
HarmonyOS如何创建及调用三方库
介绍 本篇主要向开发者展示了在Stage模型中,如何调用已经上架到三方库中心的社区库和项目内创建的本地库。效果图如下: 相关概念 Navigation:一般作为Page页面的根容器,通过属性设置来展示页面的标题、工具栏、菜单。Tabs&#…...
我手写的轮子开源了
我手写的轮子开源了 文章目录 1.gitee坐标和地址1.1.gitee坐标1.2.gitee地址 2.github坐标和地址2.1.github坐标2.2.github地址 3.总结 1.gitee坐标和地址 1.1.gitee坐标 <dependency><groupId>io.gitee.bigbigfeifei</groupId><artifactId>es-sprin…...
第十九章 linux部署scrapyd
文章目录 1. linux部署python环境1. 部署python源文件环境2. 下载python3. 解压安装包4. 安装5. 配置环境变量6. 检查是否安装成功7. 准备python使用的包8. 安装scrapyd9. 配置scrapyd10. 开放6800端口 2. 部署gerapy1. 本机下载包2. 初始化3. 进入gerapy同步数据库4. 创建用户…...
微信打卡小程序怎么做_用户的每日习惯培养神器
微信打卡小程序:你的每日习惯培养神器 在这个快节奏的现代社会,我们每天都在忙碌中度过,有时候甚至会忘记自己曾经立下的那些小目标、小习惯。然而,随着科技的不断发展,微信打卡小程序的出现,为我们的生活…...
C语言数据在内存中的存储
reference n.提及,谈到;参考,查阅;(引自书或诗歌的)引言,引文; 引文的作者,参考书目;(帮助或意见的)征求,征询;…...
管理公司员工上网行为的软件都有哪些?
随着互联网的飞速发展,企业面临的网络安全威胁也日益加剧。为了保护企业数据安全、提高工作效率,上网行为管理系统及其相关管理软件应运而生。 未来,随着技术的不断进步和网络安全威胁的不断演变,上网行为管理系统及其管理软件将不…...
手撕C语言题典——逆序输出
有这样一个问题:读入一些整数,逆序输出到一行中。已知的是该整数不超过100个。我们该怎么办呢?我们先将这些整数循环输入,输入每个整数之后,我们只能将数组存下来,而这个地方就是数组。 本章可能用到的知识…...
如果保障服务器的安全
如果保障服务器的安全 一、修改它最开始的密码,后期也要一直更换。一般如果有客户来了服务器的话,服务器厂商都会提前把所有的系统都装好,之后再把这个权限交到用户的手里。很多用户可能在这方面不会特别注意,密码也不修改&#x…...
【SQL】1280. 学生们参加各科测试的次数 (笛卡尔积)
前述 知识点回顾:数据库中的四大join & 笛卡尔乘积(以MySQL为例) 笛卡尔积的两种写法 select * from stu,class; select * from stu cross join class; 题目描述 leetcode题目:1280. 学生们参加各科测试的次数 Code 写法…...
高企认定中科技成果转化是什么呢?
其实,这是一个流程,可以用下面的分段进程来表示:企业开展科研立项—科研立项得到科研结果—科研结果用于产品的生产—新产品品质提高带动了销售的增加。 上面的流程,其实是高企审核的核心,不仅仅关系到了量化打分。更…...
第十二届蓝桥杯省赛CC++ 研究生组-货物摆放
还是整数分解问题,注意n本身也是约数 #include <iostream> int main(){printf("2430");return 0; }#include <iostream> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const ll n 2021041820210418LL…...
基于SpringBoot的学生成绩管理系统
基于SpringBootVue的家教管理系统的设计与实现~ 开发语言:Java 数据库:MySQL 技术:SpringBoot 系统功能结构展示 登录界面图 现今,越来越多的人乐于选择一项合适的管理方案,但是普通用户往往受到管理经验地限制&…...
旅游管理系统 |基于springboot框架+ Mysql+Java+Tomcat的旅游管理系统设计与实现(可运行源码+数据库+设计文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…...
SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)
文章目录 1.整合MyBatis1.需求分析2.数据库表设计3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置1.编写映射表的bean2.MonsterMapper…...
GAMES104-现代游戏引擎 1
主要学习重点还是面向就业,重点复习八股和算法 每天早上八点到九点用来学习这个课程 持续更新中... 第一节 游戏引擎导论 第二节 引擎架构分层 引擎是分层架构的 编辑器功能层资源层核心层平台层 越底层的代码越稳定越坚固,越上层的代码越灵活越开…...
idea 开发serlvet篮球秩序册管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发
一、源码特点 idea开发 java servlet 篮球秩序册管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 servlet 篮…...
【深度学习】NestedTensors
文章目录 NestedTensorsWhy NestedTensor初始化 NestedTensorNestedTensor 操作reshape转置查看维度其他 NestedTensors DETR 中常见的数据格式为 NestedTensors,那么什么是 NestedTensors 呢? NestedTensor,包括 tensor 和 mask 两个成员&a…...
【网络】负载均衡
OSI模型每一层的负载均衡 在OSI模型中,每一层的负载均衡具体如下: 1. 第二层(数据链路层):数据链路层的负载均衡通常涉及对MAC地址的操作。在这一层,可以使用虚拟MAC地址技术,外部设备对虚拟MA…...
dataGridView 绑定List 显示内容不刷新
绑定后,原list值变动,显示内容会刷新 绑定后,list新添加的值时不会显示到界面,需要重新绑定list 微软的Bug 参考代码 public class Student{public string Name { get; set; }}List<Student> list new List<Student>();private void Form2_Load(object sender,…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
