zoukankan      html  css  js  c++  java
  • MySQL之3---体系结构

    MySQL之3---体系结构

    名词介绍

    C/S(客户端/服务端)模型介绍

    img

    • Clinet : mysql mysqldump ,sqlyog,API

    • Server : mysqld 守护进程

    连接方式:

    1. TCP/IP方式(远程、本地)

      mysql -uroot -p123 -h 10.0.0.51 -P3306
      
    2. Socket方式(仅本地)

      mysql -uroot -p123 -S /tmp/mysql.sock
      

    实例(instance)

    实例: mysqld + 线程(Master thread , IO ,SQL ,purge...) + 预分配内存(数据日志线程)
    公司: boss   + 员工(总经理+普通员工)                     + 办公室
    

    文件结构

    配置文件

    • datadir/auto.cnf: 存放自动配置的MySQL Server UUID
    • my.cnf: MySQL的配置文件

    其他重要文件

    • -basedir=dir_name: MySQL安装的二进制文件目录
    • -datadir=dir_name: MySQL的数据目录
    • -pid-file=file_name: MySQL进程ID存放文件
    • -log-error=file_name: MySQL错误日志文件

    逻辑体系架构

    img

    img

    img

    MySQL逻辑系统架构分为3层:

    • 连接层
    • SQL层
    • 存储引擎层

    连接层

    连接层是MySQL体系架构的最上层,和其他C/S架构一样,主要包含如下内容:

    • 连接处理
    • 身份验证
    • 安全管理

    1. 连接处理

    当一个客户端向服务端发送连接请求后,MySQL server会从线程池中分配一个线程来和客户端进行连接,以后该客户端的请求都会被分配到该线程上。MySQL Server为了提高性能,提供了线程池(Connection Pool),减少了创建线程和释放线程所花费的时间。

    • 提供连接协议:TCP/IP 、SOCKET
    • 提供专用连接线程:接收用户SQL,返回结果

    2. 身份验证

    当客户端向MySQL服务端发起连接请求后,MySQL server会对发起连接的用户进行认证(Authenticate),依据是:用户名,客户端主机地址和用户密码。对于使用了SSL(安全套接字层)的连接,还使用了X.509证书。

    • 提供验证:用户,密码,IP、SOCKET

    3. 安全管理

    当客户连接到MySQL server后,MySQL server会根据用户的权限来判断用户具体可执行哪些操作。MySQL 提供的部分权限的如下:

    mysql> show privileges G;
    *************************** 1. row ***************************
    Privilege: Alter
      Context: Tables
      Comment: To alter the table
    *************************** 2. row ***************************
    Privilege: Alter routine
      Context: Functions,Procedures
      Comment: To alter or drop stored functions/procedures
    *************************** 3. row ***************************
    Privilege: Create
      Context: Databases,Tables,Indexes
      Comment: To create new databases and tables
    

    SQL 层

    该层是MySQL Server的核心层,通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视图等。提供了MySQL Server数据库系统的所有逻辑功能,该层可以分为如下不同的组件:

    • MySQL Management Server & utilities(系统管理和控制工具)
    • SQL Interface(接口)
    • SQL Parser(解析器)
    • Optimizer (查询优化器)
    • Caches & buffers(缓存)

    1. MySQL Management Server & utilities(系统管理和控制工具)

    提供了丰富的数据库管理功能,具体如下:

    • 数据库备份和恢复
    • 数据库安全管理,如用户及权限管理
    • 数据库复制管理
    • 数据库集群管理
    • 数据库分区,分库,分表管理
    • 数据库元数据管理

    2. SQL Interface(接口)

    SQL接口,接收用户的SQL命令并进行处理,得到用户所需要的结果,具体处理功能如下:

    • Data Manipulation Language (DML).
    • Data Definition Language (DDL).
    • 存储过程
    • 视图
    • 触发器

    3. SQL Parser(解析器)

    解析器的作用主要是解析查询语句,最终生成语法树。首先解析器会对查询语句进行语法分析,如果语句语法有错误,则返回相应的错误信息。语法检查通过后,解析器会查询缓存,如果缓存中有对应的语句,就直接返回结果不进行接下来的优化执行操作。

    注:缓存中数据被修改,会被清出缓存。

    4. Optimizer(查询优化器)

    优化器的作用主要是对查询语句进行优化,包括选择合适的索引,数据的读取方式,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个查询语句的结果。

    5. Caches & buffers(缓存)

    包括全局和引擎特定的缓存,提高查询的效率。如果查询缓存中有命中的查询结果,则查询语句就可以从缓存中取数据,无须再通过解析和执行。这个缓存机制是由一系列小缓存组成,如表缓存、记录缓存、key缓存、权限缓存等。


    存储引擎层

    1. 存储引擎(engine)

    存储引擎是MySQL中具体与文件打交道的子系统,类似于Linux中的文件系统。MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。

    负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL结构化成表,再通过连接层的专用线程返回给用户。

    注意:存储引擎是基于表的,而不是数据库。

    2. 物理文件

    物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等


    查询的执行路径

    img

    MySQL 查询执行过程大致步骤 :

    1. 客户端向 MySQL 服务器发送一条查询请求
    2. 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果,否则进入下一阶段
    3. 服务器进行 SQL解析、预处理、再由优化器生成对应的执行计划
    4. MySQL 根据执行计划,调用存储引擎的 API来执行查询
    5. 将结果返回给客户端,同时缓存查询结果

    SQL层执行顺序(重点)

    (1)接收上层传送的SQL语句
    (2)语法验证模块:验证语句语法,是否满足SQL_MODE
    (3)语义检查:判断SQL语句的类型
    DDL :数据定义语言
    DCL :数据控制语言
    DML :数据操作语言
    DQL :数据查询语言
    ...
    (4)权限检查:用户对库表有没有权限
    (5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
    (6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
    代价模型:资源(CPU IO MEM)的耗损评估性能好坏
    (7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
    执行结果:在磁盘的xxxx位置上
    (8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
    (9)提供日志记录(日志管理章节):binlog,默认是没开启的。

    image-20201103213905075


    存储结构和逻辑结构的对比

    img

    库:库名+库属性(字符集, 校对规则)

    表:表名+列+行+表属性

    • 列:列名(字段),列属性(数据类型,约束等)
    • 行:数据行(记录)

    存储结构

    img


    用文件系统的目录来存储

    MySQL系统数据库:

    • mysql:是mysql的核心数据库,类似于Sql Server中的master库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息
    • performance_schema:MySQL 5.5新增,主要用于收集数据库服务器性能参数,库里表的存储引擎均为PERFORMANCE_SCHEMA,用户不能创建存储引擎为PERFORMANCE_SCHEMA的表
    • information_schema:MySQL 5.0新增,一个物理上并不存在的虚拟数据库,类似于“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)

    MyISAM的表:

    -rw-r----- 1 mysql mysql   10816 Apr 18 11:37 user.frm
    -rw-r----- 1 mysql mysql     396 Apr 18 12:20  user.MYD
    -rw-r----- 1 mysql mysql    4096 Apr 18 14:48 user.MYI
    

    InnoDB的表(8.0之前):

    -rw-r----- 1 mysql mysql    8636 Apr 18 11:37 time_zone.frm
    -rw-r----- 1 mysql mysql   98304 Apr 18 11:37 time_zone.ibd
    
    time_zone.frm:存储列相关信息
    time_zone.ibd:数据行+索引
    

    InnoDB限制

    5.6

    5.7

    8.0

    表的段、区、页:

    段:一个表就是一个段,包含一个或多个区
    区(extents):64个连续的页,默认大小1M
    页(pages):最小的存储单元,默认大小16k
    
  • 相关阅读:
    移动前端工作的那些事---前端制作之动画效率问题简析
    PHP从零开始-笔记-面向对象编程的概念
    php从零开始
    jquery表单验证
    Jquery网页加载进度条(随笔,当然要随便写,当日记动态心情写咯)
    Jquery实现花瓣随机飘落(收藏自慕课网)
    seajs的那点事(很坑的事),和本白的一点事(更坑的事)
    js高级群的一些整理6月
    有关jquery checkbox获取checked的问题
    最近忙着考试又是什么的,然后群里都在秀战绩,秀一下那些年的战绩吧
  • 原文地址:https://www.cnblogs.com/backups/p/mysql_3.html
Copyright © 2011-2022 走看看