MySQL是一个标准的CS架构的软件。 也就是 服务器客户端的方式
1. 登录方式
MySQL默认提供了两种登录方式
- TCP/IP通信方式 通过 ip地址端口的方式 ```sql mysql -uroot -pmimam -h127.0.0.1 -P3306
2. 通过sock文件的方式```sqlmysql -uroot -S /opt/mysql/mysql.sock
2. MySQL实例的构成
mysqld服务端 + 主线程 +工作线程 + 内存 线程指的是数据库下的线程
正常一个程序的运行过程:
从磁盘中调取使用的内容到 内存中进行修改 或者查阅等。 当本次修改完成后,会将内容重新刷到磁盘内。
而MySQL有些特殊, 它会提前占用掉机器的部分内存。以确保能够正常对外提供服务。
3. SQL的分类
结构化的查询语言 (SQL)
DQL:数据查询语言
DDL:数据定义语言
DML:数据操作语言
DCL:数据控制语言
4. 处理一条SQL的过程
连接层
SQL层
存储引擎层(网络 内存 磁盘)
使用TCP或者socket方式登录到数据库。
验证用户密码的正确性
开启一条专用线程,用于接收SQL语句,返回SQL语句的执行结果。(可以通过 show processlist;查看)
将SQL语句传送到下一层(由于该线程无法处理SQL语句,因此需要传递给下一个线程)
MySQL [(none)]>show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+----------+------------------+
| 7 | root | localhost | NULL | Query | 0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
每一个会话 会开启一个线程。 默认151个线程最大
接受 SQL语句
语法检查和SQL_MODE检查。 检查SQL语句内容的合法性,确保插入或者查询的内容合乎数据库逻辑
语意检查 - 权限检查
预处理(对语句进行预言处理)
解析语句: 生成多种执行计划
预执行: 通过优化器算法进行预言。评估执行代价(对于CPU 内存IO消耗最少的方法)#SQL 执行快慢的关键
优化器会选择其认为最优的方式进行执行
提供了查询缓存 #默认关闭的
日志记录 分为 审计日志, 通用日志 二进制日志 #默认关闭的。
接受到上层的 SQL的执行结果 到磁盘上找到相应的十六进制语句, 并返回给SQL层,结构化成二维表的方式。
由连接层最终展示到显示器上
5. MySQL的逻辑存储结构

数据库内分布着一个个的库,
每个库里都有若干个表
每个表内 都有若干个字段(列)
表有表属性
列有列的属性
6. MySQL的物理存储结构
库: 使用操作系统上的目录来标识。 同理 我们在这里创建一个文件夹,数据库内会多一个库。
所以 数据目录下的任何内容 都是不能轻易删除的。
表:
InnoDB:
time.zone.frm: 存储数据的表结构(列 列属性)
time.zong.ibd: 存储数据记录和索引(行)
ibdata1: 数据字典信息
7. InnoDB 段 区 页
InnoDB 为了方便规划数据存储, 在文件系统之上 又进行了规划
在存储上分了众多大小的块。 每一页大小为16K
为了保证数据行的连续性, 每次都会分一个页用来做数据写入。 一个区为 64个页,也就是1M
多个区 构成 一个段
