当前位置: 首页 > news >正文

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通常这样工作:

  1. 当事务开始时,它可能会读取一些数据并更新它们,这些更新实际上写入了内存中的数据页(并不直接写入磁盘)。

  2. 数据库将这些修改操作记录到undo log中,这样如果事务需要回滚,就可以恢复原先的数据。

  3. 同时,将修改操作也记录到redo log中。如果数据库系统崩溃,事务的修改可以通过redo操作重新应用。

  4. 当事务提交时,数据库确保所有的redo log都已经写入了磁盘。这种写前日志(write-ahead logging)的策略保证了即使数据库在此时崩溃,所有提交的事务的修改都不会丢失。

  5. 提交事务后,数据库还会继续将内存中更改过的数据页刷新到磁盘中,这个过程可以异步进行,不需要立即完成,因为重做日志已经安全写入。

  6. 清理阶段,事务完成后,如果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. 创建用户…...

微信打卡小程序怎么做_用户的每日习惯培养神器

微信打卡小程序&#xff1a;你的每日习惯培养神器 在这个快节奏的现代社会&#xff0c;我们每天都在忙碌中度过&#xff0c;有时候甚至会忘记自己曾经立下的那些小目标、小习惯。然而&#xff0c;随着科技的不断发展&#xff0c;微信打卡小程序的出现&#xff0c;为我们的生活…...

C语言数据在内存中的存储

reference n.提及&#xff0c;谈到&#xff1b;参考&#xff0c;查阅&#xff1b;&#xff08;引自书或诗歌的&#xff09;引言&#xff0c;引文&#xff1b; 引文的作者&#xff0c;参考书目&#xff1b;&#xff08;帮助或意见的&#xff09;征求&#xff0c;征询&#xff1b…...

管理公司员工上网行为的软件都有哪些?

随着互联网的飞速发展&#xff0c;企业面临的网络安全威胁也日益加剧。为了保护企业数据安全、提高工作效率&#xff0c;上网行为管理系统及其相关管理软件应运而生。 未来&#xff0c;随着技术的不断进步和网络安全威胁的不断演变&#xff0c;上网行为管理系统及其管理软件将不…...

手撕C语言题典——逆序输出

有这样一个问题&#xff1a;读入一些整数&#xff0c;逆序输出到一行中。已知的是该整数不超过100个。我们该怎么办呢&#xff1f;我们先将这些整数循环输入&#xff0c;输入每个整数之后&#xff0c;我们只能将数组存下来&#xff0c;而这个地方就是数组。 本章可能用到的知识…...

如果保障服务器的安全

如果保障服务器的安全 一、修改它最开始的密码&#xff0c;后期也要一直更换。一般如果有客户来了服务器的话&#xff0c;服务器厂商都会提前把所有的系统都装好&#xff0c;之后再把这个权限交到用户的手里。很多用户可能在这方面不会特别注意&#xff0c;密码也不修改&#x…...

【SQL】1280. 学生们参加各科测试的次数 (笛卡尔积)

前述 知识点回顾&#xff1a;数据库中的四大join & 笛卡尔乘积&#xff08;以MySQL为例&#xff09; 笛卡尔积的两种写法 select * from stu,class; select * from stu cross join class; 题目描述 leetcode题目&#xff1a;1280. 学生们参加各科测试的次数 Code 写法…...

高企认定中科技成果转化是什么呢?

其实&#xff0c;这是一个流程&#xff0c;可以用下面的分段进程来表示&#xff1a;企业开展科研立项—科研立项得到科研结果—科研结果用于产品的生产—新产品品质提高带动了销售的增加。 上面的流程&#xff0c;其实是高企审核的核心&#xff0c;不仅仅关系到了量化打分。更…...

第十二届蓝桥杯省赛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的家教管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 系统功能结构展示 登录界面图 现今&#xff0c;越来越多的人乐于选择一项合适的管理方案&#xff0c;但是普通用户往往受到管理经验地限制&…...

旅游管理系统 |基于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

主要学习重点还是面向就业&#xff0c;重点复习八股和算法 每天早上八点到九点用来学习这个课程 持续更新中... 第一节 游戏引擎导论 第二节 引擎架构分层 引擎是分层架构的 编辑器功能层资源层核心层平台层 越底层的代码越稳定越坚固&#xff0c;越上层的代码越灵活越开…...

idea 开发serlvet篮球秩序册管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 篮球秩序册管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 篮…...

【深度学习】NestedTensors

文章目录 NestedTensorsWhy NestedTensor初始化 NestedTensorNestedTensor 操作reshape转置查看维度其他 NestedTensors DETR 中常见的数据格式为 NestedTensors&#xff0c;那么什么是 NestedTensors 呢&#xff1f; NestedTensor&#xff0c;包括 tensor 和 mask 两个成员&a…...

【网络】负载均衡

OSI模型每一层的负载均衡 在OSI模型中&#xff0c;每一层的负载均衡具体如下&#xff1a; 1. 第二层&#xff08;数据链路层&#xff09;&#xff1a;数据链路层的负载均衡通常涉及对MAC地址的操作。在这一层&#xff0c;可以使用虚拟MAC地址技术&#xff0c;外部设备对虚拟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,…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...