《MySQL技术内幕InnoDB存储引擎》读书笔记 第一章
Mysql体系结构和存储引擎
1.1 定义数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合。 数据库文件可以使frm,MYD,MYI,ibd结尾的文件。
实例:MySQL数据库由后台线程以及一个共享内存区组成。 数据库实例才是真正用于操作数据库文件的。
实例与数据库的关系通常是一一对应的,在集群情况下可能存在一个数据库被多个数据实例使用的情况。
MySQL被设计为一个单进程多线程架构的数据库,这点与SQL Server比较类似,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多线程的架构的)
MySQL数据库实例在系统上的表现就是一个进程。
Oracle 中如果没有参数文件,在启动实例时会提示找不到该参数文件,数据库启动失败。而在MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认
参数设置启动实例。
MySQL 数据库是按 /etc/my.cnf -->/etc/mysql/my.cnf-->/usr/local/mysql/etc/my.cnf-->~/.my.cnf 的顺序读取配置文件。如果几个配置文件中都有同一个参数,MySQL数据库以读取到的最后一个配置文件中的参数为准。 在Linux环境下,配置文件一般放在 /etc/my.cnf 下。在Windows平台下,配置文件的后缀名可能是.cnf,也可能是.ini。
配置文件中有一个参数datadir,该参数指定了数据库所在的路径。在Linux操作系统下默认datadir为/usr/local/mysql/data
可以用命令查看 mysql > SHOW VARIABLES LIKE ‘datadir’\G;
1.2 MySQL体系结构
从概念上来说,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例时是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
MySQL由以下几部分组成:
连接池组件、管理服务和工具组件、SQL接口组件、查询分析器组件、优化器组件、缓冲组件、插件式存储引擎、物理文件。
需要特别注意的是,存储引擎是基于表的,而不是数据库。
1.3 MySQL存储引擎
1.3.1 InnoDB存储引擎
InnoDB存储引擎支持事物,面向在线是事物处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。
从MySQL4.1(包括4.1)版本开始,InnoDB存储引擎的表单独存放到一个独立的ibd文件中。此外,InnoDB存储引擎支持用裸设备用来建立其表空间。
如果没有显示地定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此作为主键。
1.3.2 MyISAM存储引擎
MyISAM存储引擎不支持事务、表锁设计,支持全文检索,主要面向一些OLAP数据库应用。在MySQL5.5.8版本之前MyISAM存储引擎是默认的存储引擎(除Windows版本外)。 MyISAM存储引擎的缓冲池只缓存索引文件,而不缓冲数据文件。
MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。 使用myisampack工具压缩后的表是只读的。
在MySQL5.0版本之前,MyISAM默认支持的表大小为4GB, 5.0之后默认支持256TB的单表数据。
1.3.3 NDB存储引擎
NDB存储引擎是一个集群存储引擎 更高的可用性 数据全部放在内存中(5.1版本后 可以将非索引数据放在磁盘上) 是高可用、高性能的集群系统。
NDB存储引擎的连接操作是在MySQL数据库层完成的,而不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢。如果解决了这个问题,NDB存储引擎的市场应该非常巨大。
1.3.4 Memory 存储引擎
Memory 存储引擎(之前称为HEAP存储引擎)将表中的数据存放在内存中,如果数据重启或发生崩溃,表中的数据都将消失。
不支持TEXT和BLOB列类型。
1.3.5 Archive 存储引擎
Archive存储引擎只支持INSERT和SELECT操作,从MySQL5.1开始支持索引。
Archive存储引擎非常适合存储归档数据,如日志信息。Archive存储引擎使用行锁来实现高并发的插入操作,但其本身并不是事物安全的存储引擎,其设计目标主要是提供高速的插入和压缩功能。
1.3.6 Federated存储引擎
Federated存储引擎表并不存放数据,它只是指向一台远程数据库服务器上的表。
1.3.7 Maria存储引擎
可以看做是MyISAM的后续版本。Maria存储引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事物和非事务安全的选项,以及更好的BLOB字符类型的处理性能。
mysql > SHOW ENGINES\G; //查看支持的存储引擎
1.5 连接MySQL
连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。 进程通信的方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。
TCP/IP是基于网络的,而套接字一般用于同一台服务器。
例:
TCP/IP : C:\ > mysql -h 192.168.0.101 -u david -p
UNIX域套接字: mysql -udavid -S /tmp/mysql.sock
1.6 小结
数据库和实例定义
体系结构 进一步突出 实例和数据库
MySQL插件式存储引擎
MySQL存储引擎无优劣差异只有适合不适合。