【MySQL实战】笔记

news2024/11/8 17:39:17

1、MySQL的基本架构组成
MySQL的基本架构组成包括以下几个部分:

  1. 连接器(Connection Manager):负责与客户端建立连接,并处理客户端发送的请求。连接器会验证客户端的身份、分配线程和缓存等资源,并将请求转发给下一个组件处理。
  2. 查询缓存(Query Cache):用于缓存查询语句及其结果,以提高查询性能。但是,由于查询缓存的限制较多,因此在实际应用中使用较少。
  3. 分析器(Parser):用于对SQL语句进行解析,并生成相应的解析树。解析器会检查SQL语句的语法是否正确,并将其转换成内部的数据结构。
  4. 优化器(Optimizer):用于对查询语句进行优化,以提高查询性能。优化器会根据查询的复杂度、表的大小、索引的使用情况等因素,选择最优的查询执行计划。
  5. 执行器(Executor):负责执行查询语句,并将结果返回给客户端。执行器会根据优化器生成的查询执行计划,访问存储引擎,获取数据并进行相应的操作。
  6. 存储引擎(Storage Engine):负责数据的存储和查询操作。MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有其优缺点和适用场景。
    以上组件共同协作,构成了MySQL的基本架构。
    MySQL的基本架构

2、redo log 和 binlog
redo log和binlog都是MySQL中的日志文件,用于记录数据库的变更操作,但它们的作用和使用方式略有不同。

redo log(重做日志)是InnoDB存储引擎特有的日志文件,用于记录事务中所做的修改操作。在事务提交前,InnoDB将重做日志记录到磁盘上的redo log文件中,以保证在发生故障时能够恢复事务。当MySQL重启时,它会将redo log文件中未提交的事务重新执行,以确保数据的一致性。

binlog(二进制日志)是MySQL的通用日志文件,用于记录所有数据库的修改操作。在执行每个语句或事务时,MySQL将binlog记录到磁盘上的binlog文件中。binlog文件中的内容可以被MySQL复制到其他服务器上,以实现数据备份、复制和恢复等功能。binlog文件还可以用于数据恢复和故障排除。

简单来说,redo log是InnoDB存储引擎的事务日志,用于保证数据的一致性和可靠性;而binlog是MySQL的通用日志文件,用于记录所有数据库的修改操作,以实现数据备份、复制和恢复等功能。

redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。

sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。

3、执行一条update的流程

mysql> update T set c=c+1 where ID=2;
  1. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
  2. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
  3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
  4. 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
  5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

4、怎样让数据库恢复到半个月内任意一秒的状态?

当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做:

首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;

然后,从备份的时间点开始,将备份的 binlog 依次取出来,重放到中午误删表之前的那个时刻。

这样你的临时库就跟误删之前的线上库一样了,然后你可以把表数据从临时库取出来,按需要恢复到线上库去。

5、为什么日志需要“两阶段提交”
假设当前 ID=2 的行,字段 c 的值是 0,再假设执行 update 语句过程中在写完第一个日志后,第二个日志还没有写完期间发生了 crash,会出现什么情况呢?

先写 redo log 后写 binlog:
假设在 redo log 写完,binlog 还没有写完的时候,MySQL 进程异常重启。由于我们前面说过的,redo log 写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行 c 的值是 1。但是由于 binlog 没写完就 crash 了,这时候 binlog 里面就没有记录这个语句。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。

先写 binlog 后写 redo log:
如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以这一行 c 的值是 0。但是 binlog 里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog 来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。

可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。

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

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

相关文章

pdf转excel怎么样格式不乱?这两个方法轻松转换!

PDF和Excel是广泛应用的文件格式,然而,将PDF转换为Excel时,常常面临格式混乱的问题。幸运的是,我们有记灵在线工具和Adobe Acrobat Pro软件这两个简单而有效的方法,可以帮助我们将PDF转换为Excel并保持格式整齐。本文将…

复旦微7045环境安装

Linux Petalinux 0.下载 更换下载源:https://blog.csdn.net/u012308586/article/details/102737950 更换中文:https://cloud.tencent.com/developer/article/2159346 1.配置 配置/bin/sh 由于 petalinux 用到的/bin/sh 命令都是 bash 的&#xff0c…

好用又强大的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点

作为一款强大易用的开源建站工具,配合上不同的模板与插件,可以很好地帮助你构建你心中的理想站点。它可以是你公司的官方网站,可以是你的个人博客,也可以是团队共享的知识库,甚至可以是一个论坛、一个商城。 控制台 控制台是一个 Halo 站点的后台管理系统,只有具有权限…

本周大新闻|visionOS SDK开放下载;Meta和三星停止芯片合作

本周XR大新闻,AR方面,visionOS 1.0系统和SDK发布;Meta和三星停止芯片合作,转而投向联发科;Karl Guttag评Vision Pro第二篇发布;Vision Pro眼球追踪细节。 VR方面,Vision Pro游戏空间边界为3米圆…

在CSDN的第1095天(3年),我收获了什么?

机缘 当初接触CSDN的时候是老师带进来的,那时候说人要有一个记录学习的习惯,可以记录很多东西,在后来看着老师的博客粉丝数和阅读数,哈哈哈,我心动了,于是就加了进来,记录点点滴滴。 于是开始…

使用Docker Swarm部署PXC+HAProxy高可用集群(三节点)

使用Docker Swarm部署PXCHAProxy高可用集群(三节点) 1. 部署规划 当前规划中,只启动一个HAProxy服务,主要用来做MySQL节点的负载均衡和代理,但是HAProxy可能会出现单点故障,后续需要启动多个HAProxy节点&…

【动态规划算法练习】day5

文章目录 一、309. 最佳买卖股票时机含冷冻期1.题目简介2.解题思路3.代码4.运行结果 二、714. 买卖股票的最佳时机含手续费1.题目简介2.解题思路3.代码4.运行结果 三、123. 买卖股票的最佳时机 III1.题目简介2.解题思路3.代码4.运行结果 四、188. 买卖股票的最佳时机 IV1.题目简…

ES6-Map()对象

Map是一个键值对的集合和Object类似,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。Map做为构造函数,可以通过全局对象获取到需要通过new操作创建实例对象。 map与Objec…

移动端适配方案

文章目录 像素设备像素(物理像素)设备独立像素(逻辑像素)CSS像素像素之间的关系 分辨率设备分辨率逻辑分辨率 移动端开发分类自适应响应式视口布局视口(layout viewport)视觉视口(visual layout)理想视口&a…

数据结构-哈希-位图与布隆过滤器

位图与布隆过滤器 一,位图题目分析位图设计位图代码经典题目 二,布隆过滤器布隆过滤器概念布隆过滤器的插入布隆过滤器的结构布隆过滤器总结经典题目 三,哈希切割 一,位图 题目分析 🚀给40亿个不重复的无符号整数&am…

【UE 从零开始制作坦克】11-坦克炮塔机枪

效果 步骤 1. 复制一份坦克炮弹的蓝图,重命名为“MachineGunBullets”,作为坦克炮塔机枪子弹的蓝图 2. 打开“MachineGunBullets”,由于美M2勃朗宁重机枪的口径是12.7毫米,这里取12毫米,也就是1.2cm,半径是…

Stream流中Map方法的使用

map函数的作用就是针对管道流中的每一个数据元素进行转换操作。 主要有三种用法 一、Stream管道流map的基础用法 将集合中的每个字符串&#xff0c;全部转化成大写&#xff01; 不使用流 List<String> list Arrays.asList("Monkey", "Lion", &…

你知道免费mp3格式转换器有哪些吗

小明是一个音乐爱好者&#xff0c;经常下载一些高质量的无损音频文件。但他发现有些音频文件格式并不支持他的播放器&#xff0c;这让他很苦恼。有一天&#xff0c;他听说了mp3格式转换器这个神奇的工具&#xff0c;可以将音频文件格式转换成mp3&#xff0c;从而方便他在各种设…

Jetpack Compose:构建现代Android应用的BottomNavigation

Jetpack Compose是Google推出的一种全新的声明式UI框架&#xff0c;它引领了Android开发的新风潮。在这篇博客中&#xff0c;我将详细介绍如何使用Jetpack Compose来构建一个具有底部导航栏&#xff08;BottomNavigation&#xff09;的现代Android应用。 首先&#xff0c;让我们…

【C++学习】内联函数 | nullptr空指针 | 初步认识面向对象 | 类访问限定符 | 封装 | 类对象的内存对齐

写在前面&#xff1a; 上一篇文章我介绍了引用和auto相关的知识&#xff0c; 如果有兴趣的话可以去看看&#xff1a;http://t.csdn.cn/j6jsI 这篇文章大概能够讲完C入门的一些语法&#xff0c;开始类和对象的学习之旅。 目录 写在前面&#xff1a; 1. 内联函数 2. nullp…

用Python带你制作小时候玩的“大富翁”(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 首先 接下来需要定义各种类型的物业&#xff0c;包括普通物业、铁路、公用事业等等。 接下来需…

【Spring 】项目创建和使用

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 谈起Java 圈子里的框架&#xff0c;最年长最耀眼的莫过于 Spring 框架啦&#xff0c;如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

强化学习从基础到进阶-常见问题和面试必知必答[5]::梯度策略、添加基线(baseline)、优势函数、动作分配合适的分数(credit)

【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧&#xff08;调参、画图等、趣味项目实现、学术应用项目实现 专栏详细介绍&#xff1a;【强化学习原理项目专栏】必看系列&#xff1a;单智能体、多智能体算法原理项目实战、相关技巧…

Spring Cloud - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

目录 一、Nacos 安装和配置 二、Nacos 服务注册发现 2.1、将服务注册到 nacos 中 2.2、执行效果 三、Nacos 的服务分级模型及配置 3.1、分级模型 3.2、配置集群 3.3、配置 Nacos 负载均衡策略 3.4、Nacos 服务实例的权重设置 3.5、环境隔离——namespace 四、Nacos注…

真实企业做自动化测试做法,从测试用例到测试报告...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先&#xff0c;…