体系结构
1. c/s(客户端/服务端)模型介绍
1.1 MySQL的连接方式
tcp/ip方式 (远程,本地) :
mysql -uroot -p123 -h 10.0.0.51 - P3306
socket 方式(仅本地) :
mysql -uroot -p123 -S /tmp/mysql.sock
1.2 实例介绍
实例=mysqld后台守护进程 + master thread + 副进程 + 预分配的内存
2. MySQL程序运行原理
2.1 MySQL程序结构
2.1.1 连接层
(1) 提供连接协议: tcp/ip , socket
(2) 提供验证: 用户, 密码, IP, socket
(3) 提供专用线程链接: 接收用户sql ,返回结果
注: show processlist; 查看线路连接基本情况
2.1.2 SQL 层
1) 接收上层传输的SQL语句
2) 语法验证模块: 验证语句 语法
3) 语义检查: 判断语句的类型
DDL: 数据定义语言
DCL: 数据控制语言
DML: 数据操作语言
DQL: 数据查询语言
4) 权限检查: 用户对库,表有没有权限
5) 解析器: 进行SQL的预处理, 产生执行计划 (也就是给出如何查找数据的方案)
6) 优化器: 根据解析器给出的多种执行计划,进行代价判断,选择最优的执行计划;
代价模块: 是根据资源(CPU IO MEM)的损耗评估性能好坏
7) 执行器: 根据最优执行计划, 执行SQL语句,产生执行结果
执行结果: 数据在磁盘的哪个位置
8) 提供查询缓存 (默认没有开启): 通常会使用redis tair 替换查询缓存功能
9) 提供日志记录(默认没有开启): binlog,
2.1.3 储存引擎层
负责根据SQL层执行的结果,从磁盘上拿数据.
将16进制的磁盘数据,交由SQL架构画成表,
在由连接层的专线程返回给用户.
3. 数据库的逻辑结构
3.1 库
库就像Linux里的目录一样,用库名和属性两部分组成,库下面是表
3.2 表
表就像Linux的文件 ,由表名和属性两部分;但表里是由列和行组成
列: 列名(字段), 列属性(数据类型,约束等)
行: 数据行(记录)
4. 数据库的物理结构
4.1 MyISAM (引擎) 的表:
-rw-r----- 1 mysql mysql 10816 Apr 18 11:37 user.frm (储存列的相关信息)
-rw-r----- 1 mysql mysql 396 Apr 18 12:20 user.MYD (储存数据行)
-rw-r----- 1 mysql mysql 4096 Apr 18 14:48 user.MYI (储存索引信息)
4.2 InnoDB(默认的存储引擎)的表:
-rw-r----- 1 mysql mysql 8636 Apr 18 11:37 time_zone.frm (存储列相关信息)
-rw-r----- 1 mysql mysql 98304 Apr 18 11:37 time_zone.ibd (储存数据行和索引)