MySQL 三层结构
MySQL三层架构作用
1.连接层作用
验证用户的合法性(IP,port,username,password)
提供两种连接方式(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层查询流程示意图
MySQL调用关系
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