文章目录
前言
第一篇文章中主要学习了mysql二进制的基本安装及数据库初始化等操作,本篇文章主要了解mysql的体系结构和管理,例如: mysql的实例组成、逻辑存储结构、物理存储结构等方面展开学习
提示:以下是本篇文章正文内容,下面案例可供参考
一、体系结构
1、mysql c/s结构介绍
从上图可知,mysql有两种连接方法
第一种:
TCP/IP : mysql -uroot -p -h IP地址 -P 端口
第二种: 如果你看了我第一篇文章,就大概了解了socket连接方法的配置
Socket: mysql -uroot -p -S /data/mysql3306/data/run/mysql.sock
2、mysql实例组成
mysqld守护进程 + master thread + 干活的thread + 预分配内存
3、mysqld程序运行原理
3.1、mysqld守护进程结构
3.2、 引入sql语句结构化的查询语言
DQL 数据查询语言
DDL 数据定义语言
DML 数据操作语言
DCL 数据控制语言
3.3、探索一条SQL语句的执行过程
名称 | 作用 |
---|---|
应用程序层 | 通过TCP/IP或者socket连接数据库 |
连接层 | 1、提供连接协议TCP/IP或者socket 2、验证用户名、密码、端口、地址合法性 3、开启专用连接线程,show processlist可以查看到线程(接受sql语句、返回执行结构) 4、将语句交给下一层 |
SQL层 | 1、接受sql语句 2、语法检查和sql_mode 3、语义检查(属于哪种查询语言)、权限检查 4、解析语句,生成多种执行计划树 5、通过优化器算法进行评估(cpu、io、内存、执行时间) 6、优化器选择最优的执行方法 7、语句执行器,真正执行sql语句 8、提供查询缓存(默认不开启) 9、日志记录(默认未开启)审计日志、通用日志、binlog日志 |
存储引擎层 | 磁盘、内存、网络,1、根据sql执行结果,去磁盘上找对应的数据。找到磁盘上16进制的数据,再次返回到sql层,结构化成表的方式,再由连接层线程展现处理 |
二、mysql逻辑存储结构
库 ---> 类似 linux目录
表 ---> 类似 linux文件
列(字段)
行(记录)
表属性 (元数据)
列属性
三、mysql物理存储结构
库
使用文件系统的目录来表示 (在数据库的数据目录下创建一个目录,然后可以再数据库中使用show databases查到)即数据目录下的目录名就是库名,如下图所示
表
InnoDB (默认存储引擎)
time_zone.frm 存储的表结构
time_zone.ibd 存储的数据记录和索引
ibdata1 数据字典信息
MyISAM
user.frm 存储的表结构(列、列属性)
user.MYD 存储的数据记录
user.MYI 存储索引
如下图所示
3.1、innodb存储引擎的段、区、页之间的关系
页:最小的存储单元,默认16k
区:64个连续的页,共1M
段:一个表就是一个段,包含一个或多个区
一般情况下(非分区表)
一个表就是一个段、一个段由多个区构成、一个区再由(16k)* 64个连续的页 总计1M大小
四、mysql基础管理
4.1、用户管理
用户的作用?
登录mysql、管理mysql对象(库表)
用户的定义
用户名@'白名单'
例如:
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| test | % |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
用户的操作
mysql> create user test@'192.168.0.%' identified by '123'; 创建用户并设置密码
mysql> select user,host from mysql.user; 查看用户
mysql> grant all on *.* to test@'%' identified by '123'; 创建用户并授权、设置密码(仅限于mysql8.0之前的版本)
mysql