C/S(客户端/服务端)模型介绍
C/S结构就是客户端client/sever一种模式,例如ssh服务,mysql命令就是MySQL提供的客户端程序。B/S结构就是不需要客户端, 一个ie就可以访问,例如nginx服务器。 mysql的C/S模型包括下面两种 :
TCP/IP方式(远程、本地)连接串模式:
mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
Socket方式(仅本地):
mysql -uroot -poldboy123 -S /tmp/mysql.sock 相当于mysql -uroot -poldboy123 详解:https://blog.csdn.net/kerwin612/article/details/8568206
mysql服务进程是通过bin目录下的mysqld程序启动的。
实例介绍
真正干活的称为mysql实例
实例=mysqld后台守护进程+Master Thread +干活的Thread+预分配的内存 公司=老板(启动的进程)+经理(主线程)+员工(其他线程)+办公室
mysqld程序结构
sql语句即mysql专用的命令,相当于linux里面的shell,mysql中大部分都是用sql语句进行管理使用,对于数据库 影响最大的就是sql语句的执行,所以必须对SQL语句执行过程进行了解,才能把控SQL语句对系统的影响,以便于处理 出现的各种问题。
一条SQL语句的执行过程
即研究从敲下回车输入SQL语句到返回结果的过程中发生了什么?
连接层
(1)提供连接协议:TCP/IP 、SOCKET (2)提供验证:用户、密码,IP,SOCKET (3)提供专用连接线程:接收用户SQL语句,返回结果,不负责中间SQL运行 查看连接线程基本情况,每一个连接都会提供一个线程,3306 [(none)]>show processlist;如下图:
SQL层
专门负责SQL语句的执行,接收上层传达的SQL语句,主要是和MySQL优化和性能相关。 1.接收上层传送的SQL语句 2.语法验证模块:验证语句语法,是否满足SQL_MODE(SQL_MODE是sql语句运行规范) 3.语义检查:判断SQL语句的类型 DDL :数据定义语言 DCL :数据控制语言 DML :数据操作语言 DQL: 数据查询语言 ...以上为常用SQL语句命令类型,大致包括对库,表,用户,权限等SQL语句命令 4.权限检查:用户对库表有没有权限 5.解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案. 6.优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划,最早期是根据算法模型, 选出运行最快的执行计划,现在是基于代价模型。代价模型:资源(CPU IO MEM)的耗损评估性能好坏。 优化器可以按照优化器固有的算法进行人为的干预,mysql优化根据优化器的算法为基准进行优化, 更加接近最优的算法,会选择资源损耗最小的那个执行方案。 7.执行器:根据最优执行计划,执行SQL语句,产生执行结果。执行器执行完成以后,执行结果 出现在磁盘上,即交给存储引擎层 8.提供查询缓存(默认是没开启的),会使用redis、tair(淘宝在用的)替代查询缓存功能, 重复的mysql劳动会通过替代查询缓存提高性能。 9.提供日志记录(日志管理章节):binlog,默认是没开启的。
存储引擎层(类似于Linux中的文件系统)
插件式的存储引擎,负责根据SQL层执行的结果,从磁盘上拿数据。将16进制的磁盘数据,交由SQL层结构化成表,连接层的专用线程 返回给用户。与安全角度相关。