MySQL 体系结构与原理(重要)
体系结构
MySQL是一个 C/S 模型.
Clicnt 端常有 mysql(官方), Navicat, SqlPro等等.
Server 端特就指 mysqld. 这个是官方释出的二进制版本.
Client 使用
> TCP/IP方式(远程、本地):
> mysql -uroot -poldboy123 -h 10.0.0.51 -P3306
> Socket方式(仅本地):
> mysql -uroot -poldboy123 -S /tmp/mysql.sock
实例介绍
实例即是 mysqld 后台守护进程及其对应启动的所有相关线程以及分配使用的内存.
也就是说实例就是: mysqld + 工作线程 + 预分配内存的集合.
对外简单来解理就是 mysqld 就是一个实例, 因为mysqld 会自动做线程与内存分配的事情.
mysqld 介绍
mysqld 程序结构
mysqld 主要分为 3 层, 连接层, Sql层. 存储引擎层.
mysqld sql 执行流程原理
MySQL 逻辑结构(操作对象)
逻辑结构是抽象层, 是指如何将 MySQL 服务与数据转换为逻辑性的东西展示给用户看.
MySQL
库: 库名 + 属性
表: 表名 + 表属性 + 表内容 + 表列
类比Linux
文件夹: 文件夹名 + 属性
文件: 文件名 + 文件属性 + 文件内容
MySQL 物理存储结构
物理存储结构主要分为3部分: 段 区 页
页:最小的存储单元,默认16k
簇(区):64个连续的页,共1M
段:一个表就是一个段,包含一个或多个区
磁盘物理结构
扇区: 硬盘最小存储单元, 磁盘连续的一段磁盘空间为一个扇区. 一个扇区512B.
文件系统: 分配与处理落盘存储至磁盘的管理系统. 可根据要存储的文件属性分配要存储的磁盘位置, 将扇区分段存储.
Block: 文件系统最小的IO单元. 一个 Block 占连续8个扇区, 也就是 Block 为 4K.
ext4: 将扇区格式化为 N 个 Block 的动作就是 ext4 文件系统. 而 ext4 文件系统最小的存储单元是 block.
MySQL 物理存储结构
存储引擎
以下为以Innodb做例子
存储引擎就相当于是 MySQL 的文件系统. 将 Block 格式化为不同需求的大小. 也就是(页, 簇(区), 段.)
存储引擎所作用的对象就是表, 表空间正是由段, 区, 页组成.
表空间(TableSpace): 由段, 区, 页组成的存储数据对象.
段(Segment): 表空间的数据, 即可以简单理解就是表, 一个表就是一个段, 可由一个区或多个区构成. 而段又按功能划分为数据段、 索引段、 回滚段等.
簇(区)(Extent): 固定为1M, 使用 64 个连续的 Page. 数据库的基本使用单元. (若Page为16K为基础前提下). 也就是存储段的地方. 区中的页是连续的, 但多个区并不一定是连续的.
页(Page): 默认16KB, 使用 4 个连续的 OS Block. 页的大小是可调整的. 他是MySQL中最小的IO单元.
行(Row):