《MySQL实战45讲》学习笔记

news2024/11/14 13:45:17

《MySQL实战45讲》学习笔记

[TOC]

《MySQL实战45讲》学习笔记

  • 《MySQL实战45讲》学习笔记
    • 01.基础架构:一条SQL查询语句是如何执行的
    • 02.日志系统:一条SQL更新语句是如何执行的
      • 更新语句的执行流程
      • 重要的日志模块:redo log
      • 重要的日志模块:binlog
        • 两阶段提交

01.基础架构:一条SQL查询语句是如何执行的

MySQL基本架构示意图:

以以下语句为例:

SELECT * FROM T WHAERE ID = 10;

02.日志系统:一条SQL更新语句是如何执行的

Mysql可以恢复半个月内任意1秒的状态。

更新语句的执行流程

以一条更新语句为例:

CREATE TABLE T(ID int primary key,c int);

UPDATE T SET c=c+1 WHERE ID = 2;

更新语句的执行路径和查询语句类似:

  • 执行语句前先连接数据库

  • 更新表会清空所有查询缓存。因此不建议使用查询缓存。

  • 分析器知道这是一条更新语句,优化器使用ID这个索引,执行器负责找到这一行然后更新。

    与查询流程不同的是更新流程设计两个重要日志模块:redo log(重做日志)和binlog(归档日志)。

    重要的日志模块:redo log

    在MySQl中,如果每一次更新都写进磁盘,磁盘再去找对应的记录再更新,会耗费很大的IO成本、查找成本,所以MySQL使用WAL(Write Ahead Logging)技术,先写日志,再写磁盘。

    具体为 当一条记录需要更新时,InnoDB引擎把记录先写到REDO LOG中并更新内存;在适当的时候InnoDB引擎将该操作记录到磁盘中,一般是系统空闲时。

    注意:InnoDB的redo log大小固定。从头开始写,写到末尾又回到开头循环写。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bUm3u9LW-1670140687147)(https://raw.githubusercontent.com/principlepeggy/imgForBlog/master/redolog-%E7%AC%AC%202%20%E9%A1%B5.drawio.png)]

write_pos:当前记录的位置,边写边后移且循环。

checkpoint:当前要擦除的位置,向后移且循环。

他们之间时可以用来记录操作的空闲部分。当write_pos = checkpoint时,不能执行新更新,停下擦除一些记录,推进checkpoint。

crash-safe: 数据库发生异常重启,之前提交的记录都不会丢失。

重要的日志模块:binlog

redo log是InnoDB特有的日志,binlog是server层的日志。

redo logbinlog
InnoDB特有所有引擎都可以使用
物理日志:“在某数据页做了某修改”逻辑日志:“给某行某字段+1”
循环写,空间固定会用完追加写,写到一定大小后切换到下一个,不会覆盖之前的日志
UPDATE语句的执行流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sA6zjUZL-1670140687148)(https://raw.githubusercontent.com/principlepeggy/imgForBlog/master/redolog-%E7%AC%AC%203%20%E9%A1%B5.png)]

深色是在执行器中执行的,浅色框是在InnoDB内部执行的。

两阶段提交

redo log的写入拆成了两个步骤:prepare和 commit。这就是两阶段提交,为了让两份日志的逻辑一致。

数据库恢复到半月前的任意一秒的状态:

找到最近的一次全量备份,从该备份恢复到临时库;从备份时间点开始,将备份的binlog取出,重放到想要恢复的那个时刻。此时临时库和彼时的线上库一致。

不使用两阶段提交的后果:

若写完第一个日志后,第二个日志写期间发生crash:

1.先写redo log ,后写binlog;恢复后无binlog的逻辑操作;

2.先写binlog,后写redolog;恢复后多了binlog的事务。

以上都是数据库的状态和用他的日志恢复出来的库状态不一致。

恢复数据在误操作时,及扩容时都会应用。

扩容的常用方法:全量备份加应用binlog实现。

redolog 和binlog都可以用于表示事务的提交状态,需要保持逻辑上的一致。

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

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

相关文章

Mali GPU“补丁缺口”让 Android 用户容易受到攻击

©网络研究院 Arm 的 Mali GPU 驱动程序中的一组五个可利用漏洞在芯片制造商修补它们几个月后仍未修复,可能使数百万 Android 设备面临攻击。 来自谷歌、三星、小米、Oppo 以及其他手机制造商的设备目前受到影响,正在等待修复程序到达用户手中。 …

HTML爱心照片墙源码

HTML爱心照片墙源码 css charset "utf-8"; * {padding: 0;margin: 0; } div {font-family: "微软雅黑";font-size: 14px;color: #666;padding: 0;margin: 0;; } body,html{background: black;height: 100%; } /*css3实现照片墙的样式*/ .container {widt…

Java毕业设计 基于SSM的网上图书商城系统

对于传统书店来讲,利用计算机软件技术开发一款图书商城也会让书店员工省事不少,这个图书商城能让书籍信息还有注册用户信息,以及书籍订购等内容通过一个网络平台完全展示出来,让网站用户只要登录进去图书商城就可以查看所有的内容,用户可以查看新闻以及书籍产品及时更新的信息,…

【设计模式】设计模式

书籍推荐 《设计模式-可复⽤⾯向对象软件的基础》《重构与模式》 设计模式 设计模式是指在软件开发中,经过验证的,⽤于解决在特定环境下,重复出现的,特定问题的解决⽅案; 内存模型 扩展:c语⾔当中的多态…

年产2万吨山楂酒工厂的设计-装瓶工段及车间的设计(lunwen+任务书+开题+选题表+cad图纸)

目 录 目 录 I 第一章 绪论 1 1.1设计背景及目的 1 1.1.1山楂酒的介绍及功效 1 1.1.2目标人群 1 1.1.3发展前景 2 1.2设计依据 2 1.3设计内容 2 1.4原材料的选择 3 第二章 工艺设计 4 2.1 生产时间安排 4 2.2 工艺流程图 4 2.3 工艺要点 4 2.3.1山楂 5 2.3.3压榨 5 2.3.4分离取…

【pen200-lab】10.11.1.8

pen200-lab 学习笔记 【pen200-lab】10.11.1.5 🔥系列专栏:pen200-lab 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年12月4日🌴 🍭作者…

Java自动装箱与自动拆箱

1、Java基本数据类型及其对应的包装器类类型 Java中共用8种基本数据类型,并为这8种基本数据类型中的每一种都提供了一个包装器类,例如int类型对应的包装器类是Integer。具体类型如下表: 2、自动装箱和自动拆箱 自动装箱:就是指…

【大道模式】状态模式 - State Pattern(审核状态流转)

最近在实现一个简单的审核系统,包含多个审核状态和多个审核动作,将业务逻辑映射到代码中感觉会有很多繁杂的逻辑,因此,会思考用一个比较通用、易扩展、易维护、易测试的模式来应对这种场景,了解了一下,就是…

Java数据结构与Java算法学习Day03---线性表(简略笔记记录)

目录 一、线性表 38 二、顺序表 39 三、链表 45 3.1单向链表 46、47、48 3.2双向链表 49 3.3链表反转 (面试中高频题目) 56 3.4快慢指针 57 3.4.1中间值问题 57 3.4.2单向链表是否有环问题 58 3.4.3有环链表入口问题 60 3.5循环链表 61 3.6…

(Java)Mybatis学习笔记(三)

前言 继续学习MyBatis各种查询功能章节,争取早日学完mybatis MyBatis中各种查询功能 ❄️若查询出的 数据只有一条,可以通过实体类对象或集合接收 ❄️若查询出的 数据有多条,可以通过集合接收,一定不能通过实体类对象接收&am…

社区系统项目复盘-8

文章目录任务执行和调度热帖排行生成长图优化网站的性能使用Quartz执行定时任务,实现热帖排行功能时,通过定时任务定时计算帖子分数,降低计算的数据量。使用wkhtmltopdf生成长图。通过多级缓存对热帖功能进行优化,提升网站性能。 …

回归分析-书后习题回顾总结

4-1 题目 理论基础 经典多元线性回归模型 参数β\betaβ的最小二乘估计 设rank(C)m1≤nrank(C)m1≤nrank(C)m1≤n,则β^b(CTC)−1CTY\widehat{\beta}b(C^{T}C)^{-1}C^{T}Yβ​b(CTC)−1CTY是β\betaβ的最小二乘估计 具体解题

[附源码]计算机毕业设计网文论坛管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

本田125摩托安装版成型模具设计及仿真(任务书+说明书+工艺卡片+cad图纸+sw三维图)

目录 1 绪论 1 2 模塑工艺规程的编制 3 2.1塑件的工艺性分析 3 2.1.1塑件的原材料分析 3 2.2塑件的结构和尺寸精度及表面质量分析 4 2.2.1结构分析 4 2.2.2尺寸精度分析 4 2.2.3表面质量分析 4 2.3计算塑件的体积和质量 4 2.4塑件成型工艺参数的确定 5 2…

34. 在排序数组中查找元素的第一个和最后一个位置

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓34. 在排序数组中查找元素的第一个和最后一个位置,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题…

[激光原理与应用-36]:《光电检测技术-3》- 光学测量基础 - 光电效应与光电探测器的基本原理

目录 一、概述 二、光电检测的理论基础:光电效应 三、分类 3.1 光子效应 3.2 热效应 四、光电检测器的参数 五、常见的光电探测器 5.1 光电倍增管:微弱光信号转换成电信号 5.2 光电导器件:电阻或电流随着光强的变化而变化 5.3 光伏…

idea 启动报错 Command line is too long

idea 运行启动类报错 Command line is too long 启动报错信息:Error running ‘Application‘: Command line is too long. 翻译过来就是:启动命令过长! 解决方案 1、点开项目启动配置项目; 2、shorten command line 选项选择 J…

(五)进程管理:进程的状态与控制

文章目录一、进程的状态二、进程控制1. 进程控制的原语2. 挂起与激活一、进程的状态 进程的生命周期:从创建到终止的过程 进程的三种基本状态 就绪(Ready) 可运行而未运行的状态,进程已经分配到除了处理机外的所有资源&#xf…

[附源码]计算机毕业设计校园订餐系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

python数据分析及可视化(十六)金融量化(金融工具、金融分析、Tushare安装使用、双均线分析)

金融介绍 金融就是对现有资源进行重新整合之后,实现价值和利润的等效流通。 比如小明想把手里的资金投资给小李,而小李有好的增值项目但是缺少资金,如果小李的项目创业成功,小明的资金就会增长。 金融工具 在金融市场中可交易的…