MySQL客户端与服务端模型
MySQL是C/S结构的服务
C/S:client/server结构客户端和服务端结构
MySQL客户端:
- MySQL
- MySQLadmin
- MySQLdump
图形化
- SQLyog
- navicat
MySQL服务端的连接方式
TCP/IP连接
MySQL TCP/IP连接是通过网络使用TCP/IP协议进行通信的连接方式。在进行TCP/IP连接时,需要指定目标主机的IP地址和目标端口。这种连接方式适用于不同主机之间的通信,可以在不同网络环境下进行连接。
TCP/IP连接需要建立三次握手,速度比Socket慢,但是可以进行远程连接。
## -h选项+IP地址 都是TCP连接
[root@db01 ~]# mysql -uroot -p123 -h10.0.0.52
Socket连接
MySQL socket连接是在操作系统层面上使用socket接口进行通信的连接方式。在进行socket连接时,可以使用文件路径、命名管道等方式进行连接。这种连接方式适用于在同一台主机上的不同进程之间进行通信。
## -S选项 指定mysql.sock文件路径
[root@db01 ~]# mysql -uroot -p123 -S /app/mysql/tmp/mysql.sock
tips:
## MySQL默认使用socket连接
## 以下属于哪种连接方式?
mysql -uroot -p123
Socket连接 因为Socket连接效率更高 不需要经过TCP三次握手四次挥手
mysql -uroot -p123 -h127.0.0.1
TCP连接 只要-h后面加IP地址,就是TCP
mysql -uroot -p123 -hlocalhost
Socket连接 不是所有的-h都是TCP 需要 -h+ip地址
##########以下为错误写法,只是为了理解连接方式#######
mysql -uroot -p123 -h10.0.0.51 -S /tmp/mysql.sock
mysql -uroot -p123 -S /tmp/mysql.sock -h10.0.0.51 // TCP
都是TCP连接 只要加-h后面是IP地址,不管socket写在什么位置,一律TCP连接
1)MySQL默认使用Socket连接,TCP连接需要建立三次握手,速度比Socket慢
2)不是只要-h就一定是TCP连接
3)当-h和-S一起出现时,如果-h指定的是IP地址,那么一定是TCP连接
MySQL服务端构成
实例
单实例:一个后台进程+多个工作线程+预分配的内存结构
多个线程:类似于父进程子进程 一个进程(父进程) 会延伸出多个 线程(子进程)
预分配的内存结构:提前分配好指定大小的内存预留给一个服务 别的服务不能使用这些内存 就算这些内存是空闲的
windows中没有实例一说,Linux中才有实例。
OOM Killer(Out of Memory Killer)是Linux内核中的一种机制,用于在系统内存不足时终止某些进程,以释放内存资源。
当系统内存不足时,Linux内核会尝试通过回收不活跃的页面(通过页面置换算法)来释放内存。然而,如果内存压力过大,无法通过回收页面来满足需求,OOM Killer就会介入。
OOM Killer的主要作用是在系统内存不足时,通过终止某些进程来释放内存。它会根据一些策略和算法来选择哪个进程应该被终止。通常,OOM Killer倾向于终止占用大量内存的进程,以便释放更多的内存资源。
当OOM Killer触发时,它会向系统日志中记录相关信息,包括终止的进程ID和原因。这样可以帮助管理员在后续分析和调优系统时了解内存压力情况。
需要注意的是,OOM Killer是一个紧急机制,用于在系统内存不足时保证系统的稳定性。因此,建议在系统中合理配置内存,以避免过度依赖OOM Killer来解决内存问题。
4.MySQL的工作流程(工作原理)
连接层
1.两种连接方式
- TCP
- Socket
2.验证用户的合法性(用户的账号密码是否正确 用户的权限...)
3.提供了一个专用的线程,接收SQL语句并和SQL层交互
SQL层
1.接收连接层传递来的有权限的SQL语句
2.验证SQL语句(syntax)的语法
3.验证SQL语句的语义,执行的是查询,删除,修改....之类的操作
- DML:数据库操作语言(增删改,表的数据)
- DDL:数据定义语言(针对表结构)
- DCL:数据控制语言(权限授撤)
- DQL:数据查询语言(select,关键字查询语句)
- TCL:事务语言控制
4.如果有缓存的话,会先去缓存里找有没有之前写入的计划,有就直接执行缓存里的计划,没有就走下面的步骤
5.解析器,解析SQL语句,生成多种执行计划
6.优化器,根据解析器生成的多种执行计划,选择最优的一条
7.执行器,执行最优的一条SQL语句
- 提供一个专用的线程,和存储引擎层交互
- 接收存储引擎层,传来的结构化成表的数据,返回给连接层
8.如果前面有缓存,将数据写入缓存一份
9.如果开启了binlog,记录日志(binlog)
存储引擎层
1.接收SQL层传递来的SQL语句信息
2.去对应的库下找对应的表中数据,结构化成表的形式,返回给SQL层
3.提供了一个专用的线程,和SQL交互
MySQL的结构
-
逻辑结构:数据库管理员的所有操作对象(MySQL的资源)
-
库
-
表
-
真实数据
-
元数据:用来描述数据属性的数据
-
列(字段)
-
列名字(字段名)
-
数据类型
-
约束
- 是否为空
- 默认值
- 范围
- 注释
- 索引
-
其他属性
-
行数
-
大小
-
权限
-
-
-
物理结构:最底层的物理数据
物理结构的区别:存储方式、安全性、性能
MySQL文件系统单位
-
Linux文件系统CentOS7:xfs
-
Linux文件系统CentOS6:ext4
MySQL | Linux |
---|---|
库 | 目录 |
show databases; | ls -l / |
use mysql | cd /mysql |
表 | 文件 |
show tables; | ls |
二维表=元数据+真实数据行 | 文件=文件名+文件属性 |
段:一个段,是由多个区组成的(一张表)
区:一个区,是由多个页组成的,64个页为一个区1024k=1M
页:最小单位,一页,16k
Comments | NOTHING