Mysql数据库(3)—架构和日志

这篇具有很好参考价值的文章主要介绍了Mysql数据库(3)—架构和日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mysql的架构设计

Mysql分为Server层和存储引擎层:

Server层

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎层

存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。也就是说如果我们在create table时不指定表的存储引擎类型,默认会给你设置存储引擎为InnoDB。

server层的执行过程:

连接器

首先连接器会判断该用户提交的SQL是否有权限,如果有权限才会进行后续的执行操作,连接器负责跟客户端建立连接、获取权限、维持和管理连接。

查询缓存

对于有相同查询条件的请求会在查询缓存中判断是否有之前请求的缓存结果。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

分析器

如果本次请求没有缓存命中,在分析器中用以进行词法和语法的分析,如果不符合规范则会抛出异常。

优化器

词法语法分析正常的话会进行优化器处理,在这个阶段会进过成本代价分析后,选择合适的索引。

执行器

最后调用选择的存储引擎来进行数据的查询和更新等操作。

Mysql数据库(3)—架构和日志,框架和中间件,Mysql

InnoDB存储引擎的执行过程

  1. 执行一句SQL,先从考虑从内存中的buffer pool加载所需的记录数据,如果buffer pool没有相关数据,就会从磁盘中将包含该记录的页加载到buffer pool中来;
  2. 在buffer pool中将记录旧值写到undo log中,undo log是InnoDB存储引擎特有的日志类型,防止SQL执行失败需要回滚数据,如果失败直接从undo log中恢复即可;
  3. 在buffer pool中将旧值更新为新值,并将新值写入到redo log中,undo log也是InnoDB存储引擎特有的日志类型,防止SQL执行的结果还没有刷盘到磁盘中数据库服务crash掉,如果这样可以从undo log中重做;
  4. 将SQL执行的操作信息写入到binlog中,binlog按时刷盘写入到磁盘中,binlog是server层的机制,任何存储引擎都存在的机制;
  5. SQL执行完成;

undo log和redo log

  1. redo log是重做日志。保存的是一个事务T在进行X操作后的新值N,可以表示为:<T,X,N>,是innodb存储引擎特有的,支持crash之后恢复没有刷盘的数据恢复。
  2. undo log是回退日志。保存的是一个事务T在进行Y操作后的老值O,可以表示为:<T,Y,O>,是innodb存储引擎特有的,支持事务失败后进行事务回滚。

binlog

  1. bin日志是mysql运行的日志,里面记录了mysql运行的操作,他是在server层实现的日志。保存的是逻辑日志,即保存的是sql语句,通过bin 日志做数据恢复。也可以保存实际的数据格式。

buffer pool

mysql执行一句更新操作的数据不会立即写入磁盘,会先放到buffer pool中,这是内存中的一片暂存区,等一段时间会刷入磁盘中。这样设计的作用是提高读写数据的效率。

WAL机制

WAL是先写日志再进行刷盘操作,就是会先将操作写入到redo log+binlog中,再将buffer pool中数据刷入磁盘;这样做的优势是:(1)保障数据不会丢失。及时数据服务crash,也能从redo log中进行恢复;(2)由于刷盘操作是顺序操作,相对于随机写的效率会高很多;(3)实际修改先写入buffer pool中,等内存满了在刷盘,这样明显降低了IO次数,提升了IO效率。文章来源地址https://www.toymoban.com/news/detail-693715.html


到了这里,关于Mysql数据库(3)—架构和日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s创建数据库mysql MySQL数据库之日志管理

     本文使用的是本机挂载数据,这样存在一个弊端没有pvc挂载好  重点来了: 这种共享宿主机存储的方法似乎可以解决Mysql数据库数据恢复的场景,我们似乎可以万事大吉了! But ,有的老铁会问:如果我得宿主机挂了怎么办?或者Pod没有在上一次节点上拉起,而是在新的节点

    2023年04月27日
    浏览(89)
  • 《MySQL高级篇》十五、其他数据库日志

    我们在讲解数据库事务时,讲过两种日志: 重做日志 、 回滚日志 。 对于线上数据库应用系统,突然遭遇 数据库宕机 怎么办?在这种情况下,定位宕机的原因就非常关键。可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信

    2024年02月14日
    浏览(62)
  • MySQL基础(三十六)其他数据库日志

    千万不要小看日志 。很多看似奇怪的问题,答案往往就藏在日志里。很多情况下,只有通过查看日志才能发现问题的原因,真正解决问题。所以,一定要学会查看日志,养成检查日志的习惯,对提升你的数据库应用开发能力至关重要。 MySQL8.0 官网日志地址:“ https://dev.mys

    2024年02月05日
    浏览(65)
  • 十万字图文详解mysql、redis、kafka、elasticsearch(ES)多源异构不同种类数据库集成、数据共享、数据同步、不同中间件技术实现与方案,如何构建数据仓库、数据湖、数仓一体化?

    数据库大数据量、高并发、高可用解决方案,十万字图文详解mysql、redis、kafka、elasticsearch(ES)多源异构不同种类数据库集成、数据共享、数据同步、不同中间件技术实现与方案,如何构建数据仓库、数据湖、数仓一体化?Delta Lake、Apache Hudi和Apache Iceberg数仓一体化技术架构

    2024年02月07日
    浏览(52)
  • 【MySQL高级篇笔记-其他数据库日志(下) 】

    此笔记为尚硅谷MySQL高级篇部分内容 目录 一、MySQL支持的日志 1、日志类型 2、日志的弊端 二、慢查询日志(slow query log) 三、通用查询日志(general query log) 1、问题场景  2、查看当前状态 3、启动日志 方式 1 :永久性方式 方式2:临时性方式  4、查看日志 5、停止日志 方式1:永

    2024年02月08日
    浏览(147)
  • MySQL-备份+日志:介质故障与数据库恢复

    本关任务: 备份数据库,然后再恢复它。 为了完成本关任务,你需要掌握: 1.MySQL的恢复机制; 2.MySQL提供的备份与恢复工具。 和大多数DBMS一样,MySQL利用备份、日志文件实现恢复。 具体理论知识在此不详细介绍。 MySQL提供了以下工具: 逻辑备份工具:mysqldump 物理备份工具

    2024年02月05日
    浏览(89)
  • MySQL数据库架构

    MySQL架构自顶向下大致可以分为 连接层 , SQL层 , 存储引擎层 , 物理文件层 。架构如下 客户端连接器,MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序:客户端是与MySQL系统进行交互的组件,它可以是命令行工具、图形用户界面 (GUI) 或各种编程语言中的数据库

    2024年02月13日
    浏览(45)
  • java springboot架构 自定义注解保存项目业务日志,使用线程池保存到数据库

    目录 1:pom.xml依赖 2:注解类样例 3:枚举类 4:具体处理方法类 5:线程池类 1:pom.xml依赖 2:注解类样例 3:枚举类 4:具体处理方法类 5:线程池类

    2024年02月15日
    浏览(50)
  • MySQL数据库——MySQL慢查询日志(Slow Query Log)

    慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化。 通俗的说,MySQL 慢查询日志是排查问题的 SQL 语句,以及检查当前 MySQL 性能的一个重要功能。如果不是调优需要,一般不建议启动该

    2024年02月06日
    浏览(62)
  • 阿里云日志服务Logstore与MySQL数据库关联

    已采集日志到日志服务。更多信息,请参见数据采集。 已为日志字段创建索引。更多信息,请参见创建索引。 已有可用的MySQL数据库。更多信息,请参见创建数据库和账号。 1、在MySQL数据库中,创建用户属性表(即 chiji_user 表)。 2、添加白名单。如果是rds,设置ip白名单;

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包