注:使用了MySQL技术内幕 第二版书籍
1.定义数据库和实例
数据库:物理操作系统文件或其他形式文件类型的集合。即存储数据数据的文件,可为frm、MYD等格式文件,也可为内存中数据。
数据库实例:用于操作数据库文件的程序。
实例与数据库常常是一一对应的,即一个实例用于操作一个数据库,一个数据库被一个实例操作。在集群情况下,可能存在一个数据库被多个数据库实例使用的情况。
Mysql是单进程多线程。数据库实例在系统上的表现就是一个进程。
启动实例时,会读取配置文件,根据配置文件的参数来启动数据库实例。
mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
按照从左到右顺序读取配置文件,若有相同参数,以靠右参数为准。
2.Mysql体系结构
Mysql区别于其他数据库的最重要的特点是插件式的表存储引擎。插件式存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身所必需的,如SQL分析和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎可以按照自己的意愿来进行开发。
存储引擎是基于表的,而不是数据库。
3.存储引擎
每个表都可以根据需求,使用不同的存储引擎。每个存储引擎都有各自的特点。可以查看Mysql支持的引擎及他们的区别。
InnoDB:支持事务,主要面向在线事务处理(OLTP)。行锁设计,支持全文索引,支持外键,支持非锁定读,即默认读取操作不产生锁。
MyISAM:不支持事务,表锁设计,支持全文索引,主要面向在线分析处理(OLAP)。由MYD和MYI组成。MYD用来存储数据文件,MYI用来存储索引文件。缓存池只缓存索引文件。
NDB:集群存储引擎,share nothing 集群架构。数据放在内存中,可以将非索引数据放在磁盘上,主键查找速度极快。
注:此引擎已独立出来,从https://dev.mysql.com/downloads/cluster/下载
Memory:将表中数据存储于内存中,若数据库重启或崩溃,数据将消失,适合做临时表。默认使用HASH索引。只支持表锁,不支持TEXT与BLOB列类型。Mysql数据库使用Memory存储引擎存储查询中间结果集,如果结果集大于Memory容量设置,或含有TEXT或BLOB类型字段,则Mysql会把其转到MyISAM存储引擎表而存到磁盘上,而MyISAM不缓存数据文件,因此对查询性能有损失。
Archive:只支持INSERT和SELECT操作。支持索引、行锁;使用zlib算法将数据行压缩后存储,压缩比一般为1:10,适合存储归档数据,如日志。
Federated:并不存放数据,指向远程Mysql服务器上表。此引擎默认未开启,开启federated存储引擎只需要在my.cnf文件中增加‘federated’就可以。
Maria:用于MariaDB中,用以替换MyISAM。