MySQL体系管理结构

发布时间 2023-10-08 15:52:30作者: 普里莫

MySQL客户端与服务端模型

MySQL是C/S结构的服务

MySQL客户端

  • mysql
  • mysqladmin
  • mysqldump

图形化

  • SQLyog
  • navicat

MySQL服务端

  • mysqld

MySQL服务端的连接方式

  • TCP/IP连接
mysql -uroot -p123 -h10.0.0.51
  • Socket连接
mysql -uroot -p123 -S /app/mysql/tmp/mysql.sock

连接示例

## MySQL默认使用socket连接
mysql -uroot -p123 								// socket连接方式
mysql -uroot -p123 -h127.0.0.1 				 			   // TCP
mysql -uroot -p123 -hlocalhost 							   // Socket
mysql -uroot -p123 -h10.0.0.51 -S /tmp/mysql.sock 			// TCP
mysql -uroot -p123 -S /tmp/mysql.sock -h10.0.0.51 			// TCP

## 总结
1.MySQL默认使用Socket连接,TCP连接需要建立三次握手,速度比Socket慢
2.不是只要-h就一定是TCP连接
3.当-h和-S一起出现时,如果-h指定的是IP地址,那么一定是TCP连接

MySQL服务端构成

实例

由 一个进程 + 多个线程 + 一个预分配的内存结构

Win:服务没有预分配内存,在不考录虚拟内存的时候,启动程序的总内存不会大于物理内存,可能会蓝屏,或卡住。

linux:服务预分配内存,在不考录虚拟内存的时候,当启动程序的总内存大于物理内存的话,虚拟机内会使用oom killer机制清除掉占用内存最大的那个程序。

oom killer (Out of Memory Killer)
当系统因为内存不足而无法满足进程的内存需求时,OOM Killer会自动触发,它的主要作用是终止某些进程以释放内存资源,从而避免系统崩溃或无响应。

mysqld程序的工作流程

  • 连接层
    • 提供了两种连接方式
      • TCP
      • Socket
    • 验证用户的合法性
      • 权限
      • 用户名
      • 密码
    • 验证黑白名单
      • 验证主机和端口的黑白名单
    • 提供了一个和SQL层建立连接的专用线程
  • SQL层
    • 接受连接层传来的SQL语句
    • 验证语法
    • 验证语义
      • DML(insert update delete)
      • DDL(create database create table drop)
      • DQL(select show call desc explain)
      • DCL(grant revoke)
      • DTL(Database Transaction Language)TCL Transaction Controller Language
    • 解析器:解析后面的SQL语句
    • 优化器:提供几种比较优化的执行方案
    • 执行器:选择优化器提供的最优的一种方案,去执行
      • 提供一个与存储引擎建立连接的线程
      • 接收存储引擎层结构化成表的数据
    • 如果有缓存,写缓存
    • 记录日志(binlog)
  • 存储引擎层
    • 接收SQL层传来的SQL语句
    • 去磁盘上取出SQL语句需要的数据
    • 结构化成表格的形式返回给SQL层

MySQL的结构

  • 逻辑结构:数据库管理员的所有操作对象(MySQL的资源)
      • 真实数据
      • 元数据:用来描述数据属性的数据
        • 列 (字段)
          • 列名字 (字段名)
        • 数据类型
        • 约束
          • 是否为空
          • 默认值
          • 范围
          • 注释
          • 索引
        • 其他属性
          • 行数
          • 大小
          • 权限
  • 物理结构:最低层的物理数据

物理结构区别

 frm:format
而.frm文件是MyISAM表的元数据文件

## myisam
表结构:
[root@db01 data]# ll mysql/user*
-rw-rw---- 1 mysql mysql 10684 Jul 18 22:50 mysql/user.frm
-rw-rw---- 1 mysql mysql 236 Jul 19 10:53 mysql/user.MYD
-rw-rw---- 1 mysql mysql 2048 Jul 19 10:54 mysql/user.MYI

## innodb
[root@db01 data]# ll yl/yl_test*
-rw-rw---- 1 mysql mysql 8556 Jul 20 09:26 yl/yl_test.frm
-rw-rw---- 1 mysql mysql 98304 Jul 20 09:26 yl/yl_test.ibd

MySQL文件系统单位

Linux文件系统CentOS7:xfs

Linux文件系统CentOS6:ext4

MySQL Linux
目录
show databases; ls -l
use mysql cd /mysql
文件
show tables ls
二维表=元数据+真实数据行 文件=文件名+文件属性
段:一个段,是由多个区组成的(一张表)
区:一个区,是由多个页组成的,64个页为一个区1024k=1M
页:最小单位,一页,16k