一、MySQL体系结构和存储引擎
一、MySQL体系结构和存储引擎
1.1 定义数据库和实例
- 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是 frm、MYD、MYI、ibd结尾的文件。
- 实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行得后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。
这两个词有时可以互换使用,不过两者的概念完全不同。在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据库实例使用的情况。
当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。
linux /etc/my.cnf
win .cnf / .ini
配置文件中有一个参数 datadir,该参数指定了数据库所在的路径。linux 默认 datadir 为 /usr/local/mysql/data
1.2 MySQL体系结构
从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
存储引擎是基于表的,而不是数据库。
1)InnoDB存储引擎
支持事务,行锁,支持外键
通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认是 repeatable 级别。同时,使用一种被称为 next-key locking
的策略来避免幻读。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次读写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。
对于表中数据的存储,InnoDB存储引擎使用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。
next-key locking Innodb锁机制:Next-Key Lock 浅谈
插入缓冲(insert buffer) Mysql关键特性-插入缓冲 (Insert Buffer)
二次读写(double write)MySQL InnoDB特性:两次写(Double Write)
自适应哈希索引(adaptive hash index)MySQL 自适应哈希索引
预读(read ahead)MySQL的预读机制
2)MyISAM 存储引擎
不支持事务、表锁、支持全文索引
由 MYD 、MYI组成,MYD 用来存放数据文件,MYI 用来存放索引文件
1.5 连接MySQL
一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信。如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP / IP 套接字、UNIX 域套接字。
在通过 TCP / IP 连接到 MySQL 实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到 MySQL实例。