ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql体系结构以及基础管理

2021-01-27 20:58:46  阅读:179  来源: 互联网

标签:mysql SQL 基础 mysqld 内存 MySQL 连接 体系结构


MySQL工作模式

mysql是基于服务端/客户端的cs工作模式的;其提供了两种连接方式:
(1)本地socket连接方式,这种方式只能在本地使用,不依赖ip端口号,比如在终端输入mysql -uroot -p进行客户端对服务端mysqld的连接;
(2)tcp/ip远程连接:比如navicat进行数据库的连接;
图解:

服务器端mysqld

图解实例:

1.什么是实例?
实例 : 一个mysqld进程+mysql预分配的内存结构+大量的工作线程
2.功能是什么?
管理数据
3.mysqld在内存中的工作?
mysqld服务端启动后在内存中是一个守护进程一直运行在内存中;
在内存中MySQLd有独占的预分配内存,供来进行数据的操作,不需要频繁开辟内存空间;
mysql支持高并发,可以允许大量的用户对数据库进行操作,是其在内存中开辟了大量不同的线程来负责不同的工作;

MySQL与我们普通应用的区别,如Excel:
(1)Excel启动之后会加载到内存中,
(2)当使用Excel进行数据操作时,是在内存中开辟了一部分空间,供其使用,当对数据进行保存后,会将数据写入磁盘中,该内存会释放掉,当重新打开文件又会重新开辟内存空间;
(3)退出Excel,会将该部分内存释放掉;

mysqld的程序结构

工作原理图如下:

由两大部分组成:server层(连接层connection+SQL层)+engine引擎层
我们通过模拟SQL语句select user from mysql.user来对mysqld的程序结构进行说明:
(1)用户通过mysql -uroot -p连接到server层的连接层,同时连接层提供了连接协议;
(2)mysqld端进行验证用户名密码等;
(3)MySQL端提供专用的连接线程,每当有新的用户连接进来就会创建一个该连接线程;
通过show processlist可以进行查看该线程;
(4) 连接线层将sql语句交给SQL层进行处理sql语句;
(5)接下来SQL层进行SQL的处理工作:
(5.1)对SQL语句进行语法检查;
(5.2)检查语义(DDL,DML,DCL,DTL);
(5.3)检查用户对该条语句的执行权限
(5.4)解析器:解析预处理(评估语句的执行方案:a.全表扫描,b.索引扫描),得到执行计划;
(5.5)优化器:选择最优的方案;
(5.6)执行器:按照优化器的选择执行SQL语句,得出执行结果===>该执行结果得到的是要查询的数据在磁盘上的位置;
(5.7)查询缓存(query cache 默认不开启);
(5.8)日志记录(binlog二进制日志,glog,需要人为开启);
(6)存储引擎层:(和磁盘进行交互的模块)根据SQL的执行结果和磁盘进行交互,拿到结果,返回给server层,通过每次开辟的连接工作线程返回给用户客户端;

MySQL的逻辑结构

MySQL的逻辑结构也即MySQL的操作对象
类比于linux的逻辑结构:
文件夹:名字 + 属性
文件: 文件名 + 文件属性 + 文件内容
MySQL:(MySQL的操作对象)
库:库名 + 库属性
表:表名+表属性+表内容+列

MySQL的物理存储结构

当SQL层将执行结构交给存储引擎层后,存储引擎层所进行的段,区(簇),页的抽象处理
在磁盘上进行存储内容时,连续的磁盘空间进行存储;
文件系统将磁盘分成一个一个的block块,一个block块是4kb是8个连续的扇区,block是读取文件的最小单位;

如图:

页(page) : 默认16kB,由连续的4个block块构成;
区(簇) : 默认1M,由64个连续的page组成;
段 : MySQL中一个表就是一个段,由一个或者多个区组成;

标签:mysql,SQL,基础,mysqld,内存,MySQL,连接,体系结构
来源: https://blog.csdn.net/weixin_48561190/article/details/113268776

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有