文章目录

展开

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