MySQL高级 架构介绍

MySQL 简介

MySQL 安装

Docker 安装 参考链接

Linux 安装 参考链接

MySQL 配置文件

  • log-bin:二进制日志文件。用于主从复制。它记录了用户对数据库操作的 SQL 语句(除了数据查询语句)信息。可以使用 mysqlbinlog 命令查看二进制日志的内容。
  • log-error:错误日志。默认是关闭的,记录严重的警告和错误信息、每次启动和关闭的详细信息等
  • log:查询日志。默认是关闭的,记录查询的 sql 语句,如果开启会降低 mysql 的整体性能,因为记录日志也是需要消耗系统资源的
  • 数据文件:
    • 数据库文件:默认路径为 /var/lib/mysql,所以才有 /docker/mysql5.7.32/data:/var/lib/mysql 目录挂载
    • frm 文件:存放表结构
    • myd 文件:存放表数据
    • myi 文件:存放表索引

MySQL 逻辑架构

MySQL 采用一种分层的思想。

和其他数据库相比,MySQL 有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上。

插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离,这种架构额可以根据业务的需求和实际需要选择合适的存储引擎。

  • 连接层:这一层主要是完成连接处理、授权认证、及相关的安全方案。在该层上引入线程池的概念,为通过认证安全接入的客户端提供线程。
  • 服务层:这一层主要完成大部分的核心服务功能,包括 SQL 接口、SQL 解析、SQL 优化、缓存查询以及内置函数。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
    • SQL Interface:SQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。
    • Parser:SQL 解析器。SQL 命令传递到解析器的时候会被解析器验证和解析。
    • Optimizer:SQL 查询优化器。SQL 语句在查询之前会使用查询优化器对查询进行优化,比如有 where 条件时,它会决定先投影还是先过滤。
    • Caches&Buffers:查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取得数据。这个缓存机制是由表缓存、记录缓存、键缓存、权限缓存等组成。
  • 引擎层:这一层主要完成数据的存储和提取,服务层通过 API 和存储引擎进行通信,不同的存储引擎适用于不用场合。值得注意的是,存储引擎是基于表的,而不是数据库。
  • 存储层:这一层主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。

以一个查询为例,大致流程为:

  • MySQL 客户端通过协议与 MySQL 服务器建立链接,发送查询语句。先检查查询缓存,如果没命中,则进行语句解析等操作;如果命中,则直接返回结果,即不会再对查询进行解析、优化、以及执行等操作。
  • 然后 MySQL 通过关键字将 SQL 语句进行解析,并生成一颗对应的解析树语法解析器会使用 MySQL 语法规则验证和解析查询。预处理器则根据一些 MySQL 规则进一步检查解析数据是否合法。
  • 然后由语法解析器将解析树转化为执行计划,一条查询语句可以有很多种执行方式,但是最后都会返回相同的结果。优化器会选择其中最好的执行计划。
  • 最后,MySQL 默认使用 B 树索引,而且至多使用到表中的一个索引。

MySQL 存储引擎

  • 查看 MySQL 支持的存储引擎:

    show engines;

    查询结果为:

    Engine Support Comment Transactions XA Savepoints
    InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
    MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
    MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
    BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
    MyISAM YES MyISAM storage engine NO NO NO
    CSV YES CSV storage engine NO NO NO
    ARCHIVE YES Archive storage engine NO NO NO
    PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
    FEDERATED NO Federated MySQL storage engine NULL NULL NULL
  • 查询 MySQL 默认使用的存储引擎:

    show variables like '%storage_engine%';

    查询结果为:

    Variable_name Value
    default_storage_engine InnoDB
    default_tmp_storage_engine InnoDB
    disabled_storage_engines
    internal_tmp_disk_storage_engine InnoDB
  • MyISAM 和 InnoDB 对比:

    MyISAM InnoDB
    主外键 不支持 支持
    事务 不支持 支持
    行表锁 支持表锁,不适用高并发场景。 支持行锁,并且采用 MVCC(多版本并发控制) 来支持高并发
    缓存 只缓存索引 除了缓存索引还缓存真实数据
    表空间 小,以紧密格式存储 大,以数据格式存储
    索引 非聚簇索引。它的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。 聚簇索引。它的主键索引的叶子节点存储的是行数据,因此主键索引非常高效。它的非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引非常高效。
    应用场景 非事务表,大量的 select 操作 事务表,大量 insert 和 update 操作
    关键特性 地理空间搜索 插入缓冲:对写索引做了优化,但是索引具体起作用是在读数据的时候。 二次写:保证数据页的可靠性。 自适应哈希索引:会监控对表上各索引页的查询,可以提升速度。 异步IO:提高磁盘操作性能。 刷新邻接页:当刷新一个脏页时, InnoDB 会检测该页所在的区, 并将该区下所有的脏页一起刷新。
  • 存储引擎的选择:

    • 需要事务支持,推荐 InnoDB
    • 需要在线热备份,推荐 InnoDB
    • 需要容灾备份,推荐 InnoDB
    • 需要地理空间搜索,推荐 MyISAM
  • 存储引擎的转换:

    • alter table mytable engine = InnoDB; 这种方法适用与任何存储引擎,但是需要执行很长时间。因为MySQL会执行将数据从原表复制到一张新的表中,在复制期间可能会消耗系统所有的I/O能力,同时原表会加上读锁。
    • 导出和导入。使用 mysqldump 工具将数据导出到文件。
    • 创建和查询。先创建一个新的存储引擎的表,然后利用insert... select`语法来导数据。如果数据量太大,可以考虑分批处理,针对每一段数据执行事务提交操作。

总结和练习

参考链接

【MySQL 高级】架构介绍的更多相关文章

  1. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  2. MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎

    文章目录 Mysql逻辑架构介绍 总体概览 总体概览 mysql存储引擎 查看命令 看你的 mysql 现在已提供什么存储引擎 : 看你的 mysql 当前默认的存储引擎 : 各个引擎简介 MyISA ...

  3. Mysql逻辑架构介绍

    总体概览: 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 ...

  4. 3.MySQL的架构介绍

    MySQL简介: 高级MySQL:mysql 内核 sql优化工程师 mysql服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容灾备份 sql编程 完整的mysql优化需要很深的 ...

  5. 尚硅谷MySQL高级学习笔记

    目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...

  6. MySQL高级01

    MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB. 官网下载地址:http://dev.mysql.com/downloa ...

  7. mysql 高级和 索引优化,目的:查的好,查的快,性能好

    1-事物隔离级别: 更新丢失, 并发情况下,对同一字段进行更新,就会出现更新丢失,采用乐观锁,比较版本号或时间戳可解决 读未提交 解决了更新丢失但是会引起脏读, 二个session.sessionA中 ...

  8. MySQL高级第一章——架构介绍

    一.简介 是一个经典的RDBMS,目前归属于Oracle 高级MySQL包含的内容: MySQL内核 SQL优化工程师 MySQL服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容 ...

  9. mysql高级教程(一)-----逻辑架构、查询流程、索引

    mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...

随机推荐

  1. 2020中国.NET开发者峰会主题内容发布

    2020年12月09日,组委会正式发布了China .NET Conf 2020中国 .NET 开发者峰会的主题内容. 今年的大会主题收到超预期的主题,无论是数量还是质量上都比2019年有所进步,这也 ...

  2. 条件循环语句组成了Python代码的骨架

    条件控制 我们都知道流程图是有多个分支的,程序中也是如此,在Python中是用if语句来判断程序该走哪个分支的.它的执行过程如下: 代码执行过程如下: if if语句的一般形式如下: if condi ...

  3. 学习笔记:Kruscal 重构树

    网上感觉没有什么很详细 + 证明的讲解啊) 前置:Kruskal 求最小生成树. 这个算法可以将一棵树 / 无向连通图重构成一颗有性质的新树. 算法可以解决一些树上瓶颈边权之类的问题,可以把需要持久化 ...

  4. linux tar 压缩和解压缩

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个. 下面 ...

  5. Java-静态关键字Static&静态代码块

    静态成员变量:(static修饰变量) 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类.多个对象共享同一份数据. 静态方法:(static修饰方法) 一旦使用 ...

  6. python 字典常用操作

    字典键是唯一的,但值则不是 一个简单的字典 dict = {"guo":"1106","tang":"0809",&qu ...

  7. js上 十四、对象

    十四.对象 #1.初识对象 什么是对象? 在js中,一切皆是对象. 对象,生活中可见和不可见的东西,在世界中,客观存在的都是一个对象. 桌子,笔记本,手机,人. 在日常生活中,我们是如何来描述这个对象 ...

  8. 网站开发学习Python实现-Django学习-介绍(6.1.1)

    @ 目录 1.MVT 2.ORM 关于作者 1.MVT 主要的目的是为了快速,简便的开发数据库驱动的网站,强调代码的复用,多个组件可以很方便以插件的方式服务于整个框架,采用的是MVT设计模式(差不多的 ...

  9. RabbitMq基本概念理解

    RabbitMQ的基本概念 RabbitMQ github项目地址 RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的 消息中间件 ...

  10. 【Java】Java Win10环境搭建--JDK、Eclipse

    win10安装Java JDK环境及Eclipse安装使用(Hello world) win10环境下安装Java环境,对于小白来说简直是头疼,因为Java内部环境有着JDK和JRE两块,互相牵扯着很 ...