《MySQL技术内幕》读书总结(一):MySQL体系结构和存储引擎

文章目录

      • 前言:
      • 1、定义数据库和实例
      • 2、MySQL体系结构
      • 3、MySQL存储引擎
        • InnoDB
        • MyISAM
      • 4、连接MySQL

前言:

该技术文章是我阅读《MySQL技术内幕 InnoDB存储引擎》第2版的总结梳理
我写这里文章的目的:书中的内容过于系统和繁琐,并不是所有的内容都是重点,而且有些描述过于官方
所以该文章不会长篇大论搬运书籍中的内容,我会对书中的重点进行总结、提炼、精简;
不重要的内容不会体现在文章中,通过更加容易理解的方式,阐述给大家,希望能为屏幕前的你带来帮助

1、定义数据库和实例

先搞懂两个概念,数据库和实例:

  • 数据库:操作系统文件或其他形式文件的集合
  • 实例:由后台线程 + 共享内存组成,用于操作数据库文件

MySQL是一个单进程,多线程的持久存储数据库。MySQL实例在操作系统上的表现就是一个进程

MySQL启动时,会读取配置文件,根据配置文件参数进行启动实例,如果找不到参数文件不会启动失败(Oracle会失败),会按照编译时默认的参数进行启动,启动时查找的配置文件顺序如下:

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

本质来说,就是寻找my.cnf配置文件,可以理解为这就是MySQL的配置文件!如果这几个配置文件都有同一个参数,就会按照最后那个配置文件参数为准!

我们操作数据库是通过数据库实例来进行操作的,这句话一定要理解!

2、MySQL体系结构

首先列出MySQL的体系结构图(架构图),自上而下:
《MySQL技术内幕》读书总结(一):MySQL体系结构和存储引擎_第1张图片
从上图可以看出,MySQL采用可拔插的存储引擎,开发者可以根据自己的需要开发属于自己的存储引擎。存储引擎是基于表,而不是数据库,MySQL数据库的核心就是存储引擎,这句话要牢记!

冷知识:InnoDB存储引擎其实就是第三方存储引擎,不是官方的;后来被收购了!

3、MySQL存储引擎

InnoDB

MySQL 5.5.8版本开始,InnoDB就是默认存储引擎,主要包含以下特点:

  • 支持事务
  • 行锁
  • 外键
  • 非锁定读:默认读取操作不会产生锁

InnoDB将数据放到一个逻辑的表空间中,它将每个表单独存放到独立ibd文件中;通过MVCC(多版本并发控制)来获得高并发性;实现了4种事物的隔离级别(默认REPEATABLE);使用next-key locking策略避免幻读问题;还提供了许多高性能高可用的功能,例如:

  • 插入缓冲 insert buffer
  • 二次写 double write
  • 自适应哈希 adaptive hash
  • 预读 read ahead

InnoDB的表都是按照主键顺序存储的,如果没有主键,InnoDB就会为每一行数据自动生成一个ROWID(6字节)作为主键

MyISAM

MySQL 5.5.8之前版本,MyISAM是默认存储引擎,主要包含以下特点:

  • 不支持事务
  • 表锁
  • 支持全文索引

与众不同的点:它的缓冲池只缓冲索引文件,不缓存数据文件

MyISAM存储引擎表由MYDMYI组成:

  • MYD:用于存储数据文件
  • MYI:用于存储索引文件

通过myisampack工具可以压缩数据文件(该工具采用Huffman算法压缩),所以压缩后的表是只读;MySQL 5.0之前默认能支持表大小为4GB,后来版本默认支持256TB单表数据

关于其他还有很多种储存引擎,不过不是重点,不详细说啦!

4、连接MySQL

连接MySQL是连接进程和MySQL数据库实例进行通信,本质上是进程通信。

目前连接MySQL主要有三种方式:

  1. TCP/IP连接:例如我们在Windows本地使用Navicat连接云服务器上的MySQL实例。发起连接时,MySQL实例会先检查一张权限视图,用于判断发起请求的客户端IP是否允许连接
  2. 命名管道和共享内存
  3. UNIX域套接字:Linux和UNIX环境下可以使用,并且客户端和服务器实例在一台服务器上;实例启动后找到UNIX域套接字路径就可以建立连接了

你可能感兴趣的:(mysql,数据库,关系型数据库,MySQL技术内幕)