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

MySQL—CS模型

1
2
3
4
5
mysql两种连接方式:
#TCP/IP方式(远程、本地):
mysql -u用户名 -p密码 -h 10.0.0.51 -P3306
#Socket方式(仅本地):
mysql -u用户名 -p密码 -S /tmp/mysql.sock

2.实例介绍

1
2
3
4
数据库实例由数据库后台进程/线程以及一个共享内存组成。数据库实例才是真正用来操作数据库文件的。
实例和数据库通常是一一对应,但是在集群情况下可能存在一个数据库被多个实例使用的情况。
MySQL实例=mysqld+主线程+线程+共享内存预分配出的内存
MySQL被设计为一个单进程多线程架构的数据库。MySQL数据库实例在系统上的表现就是一个进程。

3.mysqld程序结构

MySQL—CS模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#一条SQL语句的执行过程
1>提供连接协议:TCP/IP 、SOCKET
2>提供验证:用户、密码,IP,SOCKET
3>提供专用连接线程:接收用户SQL,返回结果
通过以下语句可以查看到连接线程基本情况
mysql> show processlist;

#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,默认是没开启的。

#存储引擎层
1>负责根据SQL层执行的结果,从磁盘上拿数据。
2>将16进制的磁盘数据,交由SQL结构化化成表,连接层的专用线程返回给用户