必须了解的mysql三大日志-binlog、redo log和undo log

news2024/11/28 3:40:01

目录

  • 一,前言
  • 二,binlog-备份日志
    • 1,作用
    • 2,使用场景
    • 3,日志形式
    • 4,binlog刷盘时机
  • 三,redo log-重做日志
    • 1,概念
    • 2,为什么需要redo log
    • 3,日志形式
    • 4,redo log与binlog区别
  • 四,undo log-回滚日志
    • 1,undo log的内容和作用
    • 2,mysql的日志

一,前言

MySQL实现事务、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL
本文主要讲述MySQL的三大日志系统,Redo Log(重做日志)、Undo Log(恢复日志)、Bin Log(备份日志)

二,binlog-备份日志

1,作用

Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自带的。
作用: 数据备份和主从同步。

2,使用场景

在实际应用中,binlog的主要使用场景有两个,分别是主从复制和数据恢复。

  • 主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,Slave端重放binlog从而达到主从数据一致。
  • 数据恢复:通过使用mysqlbinlog工具来恢复数据。

3,日志形式

Bin Log共有三种日志格式,可以binlog_format配置参数指定
在这里插入图片描述

4,binlog刷盘时机

对于InnoDB存储引擎而言,只有在事务提交时才会记录biglog,此时记录还在内存中,那么biglog是什么时候刷到磁盘中的呢?mysql通过sync_binlog参数控制biglog的刷盘时机,取值范围是0-N:

  • 0:不去强制要求,由系统自行判断何时写入磁盘;
  • 1:每次commit的时候都要将binlog写入磁盘;
  • N:每N个事务,才会将binlog写入磁盘。

从上面可以看出,sync_binlog最安全的是设置是1,这也是MySQL 5.7.7之后版本的默认值。但是设置一个大一些的值可以提升数据库性能,因此实际情况下也可以将值适当调大,牺牲一定的一致性来获取更好的性能。

三,redo log-重做日志

1,概念

redo log包括两部分:一个是内存中的日志缓冲(redo log buffer),另一个是磁盘上的日志文件(redo log file)。mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redo log file。这种先写日志,再写磁盘的技术就是MySQL里经常说到的WAL(Write-Ahead Logging) 技术

2,为什么需要redo log

  • 事务的四大特性里面有一个是持久性,具体就是只要事务提交成功,数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么mysql是如何保证持久性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中
  • 但是这么做会有严重的性能问题,主要体现在两个方面:
    (1)因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了
    (2)一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机IO写入性能太差
  • 因此mysql设计了redo log,具体来说就是只记录事务对数据页做了哪些修改

3,日志形式

redo log实际上记录数据页的变更,而这种变更记录是没必要全部保存,因此redo log实现上采用了大小固定,循环写入的方式,当写到结尾时,会回到开头循环写日志

4,redo log与binlog区别

在这里插入图片描述

四,undo log-回滚日志

1,undo log的内容和作用

undo log记录的是逻辑日志,也就是sql语句
比如:当我们执行一条insert语句时,Undo Log就记录一条相反的delete语句。
作用:

  • 回滚事务时,恢复到修改前的数据。

  • 实现 MVCC(多版本并发控制,Multi-Version Concurrency Control) 。

  • MySQL事务中原子性就是使用Undo Log实现的。

2,mysql的日志

MySQL的日志(log)主要包括以下几种类型:

  • 错误日志(Error Log):记录MySQL服务器出现错误的信息,如非法用户连接、语法错误等。
  • 二进制日志(Binary Log):记录MySQL服务器执行的所有修改数据的操作语句,如INSERT、DELETE、UPDATE。
  • 慢查询日志(Slow Query Log):记录查询运行时间超过指定阈值(slow_query_log_threshold)的SQL语句。
  • 查询日志(Query Log):记录所有客户端与MySQL服务器交互的命令,包括查询和修改等操作。
  • 事务日志(Transaction Log):记录所有接收到的SQL语句,可以用于回滚和恢复。
  • 中继日志(Relay Log):主要用于MySQL的主从复制机制,用于将主服务器的二进制日志复制到从服务器上。
    以上就是MySQL的常用日志类型。

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

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

相关文章

数据结构之树(一)

一.概念 边:一棵n个结点树有n-1条边 结点深度:从根到当前结点的路径的深度。 结点高度:从当前结点到叶子结点最长路径的长度。 树的性质 树中的结点总数等于所有结点的度1;m叉树中第i(i>1)层上至多可以有m^(i-1)个节点; 高…

互联网大厂手把手教你搭建数据服务中台(附下载链接)

摘要: 随着公司业务的发展,对于数据的需求会越来越多。怎么在业务系统中高效的使用数据,让业务系统处理大数据时化繁为简,数据服务化基本是必经之路。那么什么是数据服务化,简单理解就是数据SaaS,通过一些数据库语言把…

true or false?

有同学在星球问了这样一个问题。 代码是这样的: public class Main {private static final Main instance new Main();private boolean b a;private static boolean a initA();private static boolean c a;private static boolean initA() {return true;}priva…

洛谷B2099 矩阵交换行

矩阵交换行 题目描述 给定一个 5 5 5 \times 5 55 的矩阵(数学上,一个 r c r \times c rc 的矩阵是一个由 r r r 行 c c c 列元素排列成的矩形阵列),将第 n n n 行和第 m m m 行交换,输出交换后的结果。 输入格式 输入共 6 6 6 …

DataEase 本地源码启动详细教程

本教程将引导你通过本地源码部署的方式启动 DataEase,同时我还录制了相应的视频教程,你可以跟随视频进行操作: DataEase 本地源码启动_哔哩哔哩_bilibili 1、下载并安装IDEA开发工具 2、下载安装Mysql 5.7 以及 JDK 1.8 如果你使用的是wi…

使用pdf.js展示pdf文件(亲测可用)

简单的实现方式 如果只是电脑端,可通过 iframe 标签嵌套预览 ios手机端可通过 a 标签包裹点击跳转预览(安卓端不行) 安卓电脑ios的通用方法 资料 老版本github地址 全版本地址 获取当前客户端类型 judgeClient() {let client if (/(iPh…

鲁大师智能化评测新项目——鲁大师真续航测试1.0正式发布

随着社会的高速发展,人们出行的交通工具正变得多种多样,有电单车、摩托车、自行车、两轮平衡车、甚至滑板等。不过如我们所见,电动两轮车已经成为了大多数近途出行用户的选择,因电单车具有方便、快捷、灵活、小巧、易停放等优点而…

MySQL基础篇4

MySQL基础 1. 数据类型1.1 整数类型1.2 浮点类型1.3 定点数类型1.4 位类型1.5 日期时间类型1.6 文本字符串类型1.6.1 CHAR类型和VARCHAR类型1.6.2 TEXT类型 1.7 ENUM枚举类型1.8 SET类型1.9 二进制字符串类型1.10 JSON数据类型 2. 约束2.1 前置知识2.1.1 为什么需要约束2.1.2 约…

亚马逊云科技围绕需求发力,赋能医疗与生命科学行业数字化创新

2023年4月27日,亚马逊云科技医疗与生命科学行业峰会召开,会议汇聚了业界专家和思想领袖,共同探讨行业数字化转型和创新之道。作为全球医疗及生命科学行业云计算引领者,亚马逊云科技将围绕数据、算力和行业用户体验三大需求发力&am…

移远“5G+Wi-Fi 6”方案双重加速,为用户带来更具性价比的连网体验

近年来,人们对于高速宽带连接的需求猛增,这对网络传输速率、稳定性与时延都提出了更高的要求。在离开网络寸步难行的今天,插电即用、免拉宽带的5G CPE受到了广泛关注。 在地广人稀的部分海外市场,受制于光纤铺设成本、周期、路由规…

Day966.从组件团队到Spotify模型 -遗留系统现代化实战

从组件团队到Spotify模型 Hi,我是阿昌,今天学习记录的是关于从组件团队到Spotify模型的内容。 团队结构现代化。这个方向跟管理有关,但无论掌控全局的 CTO、架构师,还是身处遗留系统一线战队的队员,都有必要了解现代…

JavaScript - 基础+WebAPI(笔记)

前言: 求关注😭 本篇文章主要记录以下几部分: 基础: 输入输出语法;数据类型;运算符;流程控制 - 分支语句;流程控制 - 循环语句;数组 - 基础;函数 - 基础&…

idm下载器2024官方最新中文版免费下载

哈喽大家好呀,coco玛奇朵发现我已经有一阵子没有给大家分享windows软件了,今天给大家分享一款暗藏惊喜的windows软件,用过之后真的很难拒绝! 这是一个可以帮你提升下载速度的工具,有了它几秒就能帮你下载好各种资源。…

UNIAPP实战项目笔记64 当前用户修改收货地址的前端和后端

UNIAPP实战项目笔记64 当前用户修改收货地址的前端和后端 思路 默认地址的修改,先清空当前id下的所有默认地址,再将新地址设为默认 前端 将新值传给后端 后端接受值后更新处理 实例截图 代码 后端 index.js var express require(express); var route…

大数据Doris(十六):分桶Bucket和分区、分桶数量和数据量的建议

文章目录 分桶Bucket和分区、分桶数量和数据量的建议 一、分桶Bucket

机器学习随记(6)—K-means

1 K-means方案 K-means 算法是一种自动将相似数据点聚集在一起的方法。 具体来说,你得到了一个训练集{,...,},并且您希望将数据分组为几个有凝聚力的“集群”。 K-means 是一个迭代过程 首先猜测初始质心,然后改进这个猜测 反复将样本分配到…

Seurat -- Cluster the cells --第一部分

文章目录 briefKNN(k-nearest neighbor)简介部分SNN(shared nearest neighbor)简介部分Annoy算法理解Jaccard indexSeurat进行聚类的步骤可视化部分subcluster之间的marker gene具体参数 brief seurat 官方教程的解释如下&#x…

Hash碰撞

Hash碰撞 什么是Hash碰撞 Hash碰撞是指两个不同的输入值,经过哈希函数的处理后,得到相同的输出值,这种情况被称之为哈希碰撞。 例如:两个不同的对象(object1和object2的值)经过Hash函数计算后的&#xf…

科思转债上市价格预测

科思转债 基本信息 转债名称:科思转债,评级:AA-,发行规模:7.249178亿元。 正股名称:科思股份,今日收盘价:67.1元,转股价格:53.03元。 当前转股价值 转债面值…

【进程间通信 之 通信的建立】

目录: 前言进程间通信的目的进程间通信的方式管道1.匿名管道简单示例1 - 消息传输五个特性四种场景简单示例2 - 进程控制对管道的深入理解 2.命名管道简单示例3 -- 不相关进程间通信 system V共享内存简单示例4 - 通知事件消息传输 总结 前言 打怪升级:…