《MySQL技术内幕InnoDB存储引擎》读书笔记 第一章

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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存储引擎无优劣差异只有适合不适合。

 

 

  

 

以上是关于《MySQL技术内幕InnoDB存储引擎》读书笔记 第一章的主要内容,如果未能解决你的问题,请参考以下文章

《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记

MySQL技术内幕:InnoDB存储引擎的目录

MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

(转)Mysql技术内幕InnoDB存储引擎-表&索引算法和锁

《MySQL技术内幕 InnoDB存储引擎》一书中用于查看数据页内容的python小工具

读书笔记-MySQL运维内参07-InnoDB数据存储结构