首页 > 数据库 >mysql

mysql

时间:2024-04-22 10:45:39浏览次数:72  
标签:执行器 log server 引擎 mysql 日志 redo

  • Mysql的基本架构是什么样的?
    • MySQL大致可以分为server层和存储引擎层两部分
    • Server 层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
    • 存储引擎层负责数据存储和提取,支持InnoDB、MyISAM、Memory 等多个存储引擎。InnoDB是默认的存储引擎。我们也可以通过指定engine的方式指定存储引擎。
    • 不同的存储引擎共有一个server层。
  • server层的连接器做了什么事?
    • 进行mysql操作时,需要先连接到数据库上。连接器接受该连接。
  • server层的查询缓存做了什么事?
    • mysql在执行查询语句前,会先到缓存看看,之前是不是执行过这条语句。能查到就直接返回,但是缓存的失效很频繁,8.0之后已经没有了这个功能。
  • server层的分析器做了什么事?
    • 对一条sql语句进行词法分析,语法分析等等。
  • server层的优化器做了什么事?
    • 优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。不同的优化方案会带来不同的执行结果。
  • server层的执行器做了什么事?
    • 执行器执行该条sql语句。
  • 讲讲mysql的redo log(重做日志)和bin log(归档日志)?
    • mysql在更新时,如果每次都写进磁盘,所耗费的io时间非常长。为了解决这个问题,就引入了redo log。具体来说,当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面。这个时机是比较空闲的时候。
    • redo log 是物理日志,记录的是“在某个数据页上做了什么修改”。
    • redo log 是循环写的,空间固定会用完。
    • redolog是存储引擎(innodb独有)的日志,bin log是server层的日志。
    • binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
  • 有了redo log 和 bin log,更新的时候是怎么进行的呢?
    • 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
    • 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
    • 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
    • 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
    • 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。
  • redo log变为了两阶段提交,这是为什么?
    • 本质上是两个日志都记录了对数据库的修改,两阶段提交是为了保持数据的一致性。
  • MVCC+隔离性看另一篇博客

标签:执行器,log,server,引擎,mysql,日志,redo
From: https://www.cnblogs.com/qirmcmww/p/18150048

相关文章

  • MYSQL explain的使用
     #1.table:表名#查询的每一行记录都对应着一个单表EXPLAINSELECT*FROMs1;#s1:驱动表s2:被驱动表EXPLAINSELECT*FROMs1INNERJOINs2;#2.id:在一个大的查询语句中每个SELECT关键字都对应一个唯一的idSELECT*FROMs1WHEREkey1='a';SELECT*FROMs1INNER......
  • [MYSQL] MYSQL ERROR CODE 错误编号合集
    1[MYSQL]MYSQLERRORCODE错误编号合集错误码错误解释备注说明错误:1236SQLSTATE:HY000(ER_MASTER_FATAL_ERROR_READING_BINLOG)消息:从二进制日志读取数据时,获得来自主服务器的致命错误%d:’%s’。错误:1237SQLSTATE:HY000(ER_SLAVE_IGNORED_TABLE)消息:......
  • MySQL-06.索引的数据结构
    1.为什么使用索引索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中的索引也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全......
  • MySql入门操作 3.0
    子查询:在查询列中设定特定信息,筛选要的特殊信息: 标量子查询:在内部的select中设定具体常量,通过常量进行筛选对应的列;具体格式不太好描述,如果对于上一章所使用的指令可以熟练应用那么这里应该也没啥问题,就是一个嵌套类比罢了下面直接给示例:相当于在要设定的条件中再使用一......
  • MAC配置mysql:mac下启动/停止/重启mysql服务
    Mac安装msyql 第一种就是直接brew installmysql第二种就是下载安装咯:https://dev.mysql.com/downloads/mysql/配置mysql系统环境变量vim  .bash_profile增加 exportPATH=${PATH}:/usr/local/mysql/binsource.bash_profile  回车执行,运行环境变量。再输入m......
  • [转帖]MySQL知识体系的三驾马车
    https://plantegg.github.io/2019/05/26/MySQL%E7%9F%A5%E8%AF%86%E4%BD%93%E7%B3%BB%E7%9A%84%E4%B8%89%E9%A9%BE%E9%A9%AC%E8%BD%A6/ MySQL知识体系的三驾马车在我看来要掌握好MySQL的话要理解好这三个东西:索引(B+树)日志(WAL)事务(可见性)索引决定了查询的性能,也是用......
  • MySQL的安装与配置——详细教程
    转载自:Winton-H原文链接免安装版的MysqlMySQL关是一种关系数据库管理系统,所使用的SQL语言是用于访问数据库的最常用的标准化语言,其特点为体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,在Web应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSys......
  • MySQL安装部署
    1.查看是否已经安装Mysqlrpm-qa|grepmysql如果你查看出来有东西,可以使用下面命令将其删除(xxx为文件全名)rpm-exxx例如:rpm-qa|grepmariadb#mariadb-libs-5.5.68-1.el7.x86_64rpm-e--nodepsmariadb-libs-5.5.68-1.el7.x86_642.下载官方Mysql包1.......
  • ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib
    ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/var/lib/mysql/mysql.sock'(2)=====================================================步骤:以下可用。(1)关闭mysql:servicemysqldstop(2)查看mysql.sock的位置(base)[root@VM-0-2-ce......
  • 解决 macOS 下 Python 3.8 安装 mysqlclient 的问题
    环境背景Python版本:3.8macOS版本:14.4(M2芯片)在安装mysqlclient时遇到的问题我在网上找到的方案基本上都是通过brewinstallmysql-connector-c安装、修改mysql_config文件、安装openssl及gcc,这个解决方案对我并没有效果解决方案步骤一:配置环境变量#使用pkg-config......