MySQL三层架构作用

image-20210612194108896

1.连接层作用

  1. 验证用户的合法性(IP,port,username,password)

  2. 提供两种连接方式(socket, TCP/IP)

3).提供一个与SQL层交互的专用线程

socket连接

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

​ 1).mysql默认连接方式为socket连接

​ 2).socket连接速度快,不需要建立TCP/IP三次握手

TCP/IP连接

mysql -uroot -p123 -h127.0.0.1

​ 1).并不是所有的-h连接都是TCP/IP连接

​ 2).所有的远程连接都是TCP/IP连接

2.SQL层作用

1). 接收到SQL语句,语法判断

2). 判断语义(判断语句类型:DDL,DML,DCL,DQL)

​ a. DDL数据定义语言(Data Definition Language) 建库,建表,设置约束等:create\drop\alter

​ b. DML数据操纵语言(Data Manipulation Language) 主要指数据的增删改: delete\update\insert\

​ c. DCL数据控制语言(Data Control Languge) 授权,回滚,提交等 grant\rollback\commit

​ d. DQL数据查询语言(Data Query Languge) 基本结构是由 select 子句, from 子句, where 子句组成的查询块

3). 解析SQL语句,生成多种执行计划

4). 优化器,选择最优的执行计划

5). 执行器,根据优化器的选择,按照优化器建议执行SQL语句,得到要去哪找SQL语句访问的数据

​ 5.1 具体在哪个数据文件上的哪个数据页

​ 5.2 将以上结果发送给下层继续处理

6). 接收存储引擎层的数据,结构话成表的形式,通过连接层提供的专用线程,将表数据返回给客户端

7). 提供查询缓存 (query_cache,memcache,redis)

8).日志记录(binlog)

3.存储引擎层

1).接收上层的执行结果

2).取出磁盘文件和相应的数据

3).返回给SQL层,结构化后生成表格由专用线程返回给客户端

SQL层查询流程示意图

image-20210612210523698

MySQL调用关系

image-20210614224225929

mysql.server & mysqld_safe & mysqld的关系与使用

三种都可以启动mysql

1.mysqld是二进制程序,所有启动方式最后都会调用mysqld.(mysqld_safe和mysql.server中发现脚本中都包含对mysqld的调用)

2.mysqld_safe shell程序,会调用mysqld, 调用mysqld_safe的时候要把-datadir、-pid-file,$other_args这些参数值传入到mysqld_safe 脚本

3.mysql.server shell程序,会调用mysql_safe mysql.server启动,默认使用/etc/my.cnf配置文件信息和其他默认配置,进而调用mysqld_safe