MySQL介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品,世界上最流行的关系型数据库管理系统之一,在 网络应用方面,MySQL是最好的关系数据库管理系统 (Relational Database Management System,RDBMS) 应用软件之一。

MySQL被设计为一个可移植的数据库,几乎能在当前所有的操作系统上运行,比如Linux,Solaris,Mac和Windows。尽管各种系统在底层(如线程)实现方面各有不同,但MySQL几乎总能保证在各平台上的物理体系结构的一致性。

MySQL是一个单进程多进程架构的数据库,但与Oracle多进程的架构有所不同(Oracle的Windows版本也是单进程多进程的架构)。这也就是说,MySQL数据库实例在系统上的表现就是一个进程。

区分数据库、数据库实例、数据库服务器

数据库(Database)

操作系统或存储上的数据文件的集合。MySQL数据库中,数据库文件可以是* .frm、.MYD、.MYI、*.ibd等结尾的文件,不同存储引擎文件类型不同。

数据库实例(Instance)

数据库实例是一个应用程序,是位于用户和操作系统之间的一层数据管理软件,由后台进程或者线程以及一个共享内存区组成。用户对数据库数据的任何操作,都是在数据库实例下进行的。应用程序只有通过数据库实例才能和数据库打交道。

数据库服务器(Database Server)

部署安装数据库实例的服务器。

数据库和数据库实例的关系

通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库;但在集群环境中存在多个数据库实例共同使用一个数据库。

MySQL架构

连接层

负责MySQL和其他应用程序的连接交互,包括连接管理、授权认证、安全等。由客户端程序连接和MySQL服务器上的连接池组成。

每个客户端连接都对应着服务器上的一个线程,MySQL服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。登录认证后,还要验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。

使用连接池的必要性:

每个连接对应一个线程,实际业务中通常有许多个连接访问数据库服务器,如果每次连接都要创建一个新的线程,连接释放则销毁线程,对于系统损耗是非常大的。通过连接池维护和缓存一定的连接,由应用程序动态地对池中的连接进行申请、使用和释放,减少了内存损耗,提升了资源利用率。

服务层(核心层)

该层是MySQL的核心,包括很多重要的服务。分别有:

  • 管理服务和工具组件:系统管理和控制工具,例如备份恢复、MySQL复制、集群等 ;

  • SQL接口组件:接受用户的SQL命令,并且返回用户需要查询的结果;

  • 查询分析器组件:SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构)

  • 优化器组件:SQL语句在查询之前会使用查询优化器对查询进行优化,选取最优的路径进行条件联接并生成最终查询结果;

  • 缓冲(Cache)组件:如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据;

存储引擎层

存储引擎负责MySQL中数据的存储与提取。 服务器中的查询执行引擎通过API与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。由于关系数据库中数据是以表的形式存储的,存储引擎又被称为表类型。

MySQL采用插件式的表存储引擎,是其区别于其他数据库最重要的特点。在Oracle 和SQL Server等数据库中,所有的数据存储管理机制都是一样的。而MySQL提供了多种存储引擎,用户可以根据需求为每张表选择特定的存储引擎(存储引擎是针对于表的而不是针对库)。

查看MySQL提供的存储引擎

show engines;


提供了十种存储引擎,默认使用:InnoDB
常见的几种存储引擎:MyISAMInnoDBMEMORY

MyISAM存储引擎

由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。

MyISAM特性

  1. 大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持
  2. 当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成
  3. 每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16
  4. 最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上
  5. BLOB和TEXT列可以被索引,支持FULLTEXT类型的索引,而InnoDB不支持这种类型的索引
  6. NULL被允许在索引的列中,这个值占每个键的0~1个字节
  7. 所有数字键值以高字节优先被存储以允许一个更高的索引压缩
  8. 每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快
  9. 可以把数据文件和索引文件放在不同目录
  10. 每个字符列可以有不同的字符集
  11. 有VARCHAR的表可以固定或动态记录长度
  12. VARCHAR和CHAR列可以多达64KB

存储格式

  1. 静态表(默认):字段都是非变长的(每个记录都是固定长度的)。存储非常迅速、容易缓存,出现故障容易恢复;占用空间通常比动态表多。
  2. 动态表:占用的空间相对较少,但是频繁的更新删除记录会产生碎片,需要定期执行optimize table或myisamchk -r命令来改善性能,而且出现故障的时候恢复比较困难。
  3. 压缩表:使用myisampack工具创建,占用非常小的磁盘空间。因为每个记录是被单独压缩的,所以只有非常小的访问开支。

静态表的数据在存储的时候会按照列的宽度定义补足空格,在返回数据给应用之前去掉这些空格。如果需要保存的内容后面本来就有空格,在返回结果的时候也会被去掉。(其实是数据类型char的行为,动态表中若有这个数据类型也同样会有这个问题)

使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)。

使用场景

如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。

MEMORY存储引擎

MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问。

MEMORY主要特性

  1. MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
  2. MEMORY存储引擎执行HASH和BTREE缩影
  3. 可以在一个MEMORY表中有非唯一键值
  4. MEMORY表使用一个固定的记录长度格式
  5. MEMORY不支持BLOB或TEXT列
  6. MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
  7. MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
  8. MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享
  9. 当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)

MEMORY存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B树型索引。由于这种存储引擎所存储的数据保存在内存中,所以其保存的数据具有不稳定性,比如如果mysqld进程发生异常、重启或计算机关机等等都会造成这些数据的消失,所以这种存储引擎中的表的生命周期很短,一般只使用一次。现在mongodb、redis等NoSQL数据库愈发流行,MEMORY存储引擎的使用场景越来越少。

使用场景

适合于需要快速的访问或临时表。

InnoDB存储引擎

mysql 5.5版本以后默认的存储引擎
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。

InnoDB主要特性

  1. InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合
  2. InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
  3. InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上
  4. InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键
  5. InnoDB被用在众多需要高性能的大型数据库站点上

InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。

使用场景

由于其支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

小结

功 能 MYISAM Memory InnoDB Archive
存储限制 256TB RAM 64TB None
支持事物 No No Yes No
支持全文索引 Yes No No No
支持数索引 Yes Yes Yes No
支持哈希索引 No Yes No No
支持数据缓存 No N/A Yes No
支持外键 No No Yes No

物理文件层

该层主要将数据库的数据(表,索引等)存储在文件系统上,并完成与存储引擎的交互。存储数据包括日志文件,数据文件,配置文件等。

日志文件

类型 名称 用途 备注
error log 错误日志 排错 /var/log/mysqld.log【默认开启】
bin log 二进制日志 备份 增量备份 DDL DML DCL
Relay log 中继日志 复制 接收 replication master
slow log 慢查询日志 调优 查询时间超过指定值

配置文件

/etc/my.cnf


还包含/etc/my.cnf.d目录下的文件:

client.cnf:

mysql-clients.cnf:

server.cnf:

数据文件

  1. .frm文件
    不论是什么存储引擎,每一个表都会有一个以表名命名的.frm文件,与表相关的元数据(meta)信息都存放在此文件中,包括表结构的定义信息等。

  2. .MYD文件
    myisam存储引擎专用,存放myisam表的数据(data)。每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下

  3. .MYI文件
    也是myisam存储引擎专用,存放myisam表的索引相关信息。对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。
    每一个myisam表对应一个.MYI文件,其存放的位置和.frm及.MYD一样

  4. .ibd文件和ibdata文件
    存放innoDB的数据文件(包括索引)。innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。

    • 独享表空间:使用.ibd文件来存放数据,且每个表一个.ibd文件,文件存放在和myisam数据相同的位置。
    • 共享表空间:使用.ibdata文件,所有表共同使用一个(或多个,自行配置)ibdata文件。
  5. db.opt文件
    此文件在每一个自建的库里都会有,记录这个库的默认使用的字符集和校验规。

一个查询流程图

参考文章:
MySQL 体系结构
MySQL学习笔记(一)MySQL体系结构
浅谈MySQL架构体系

【MySQL】--架构简介相关推荐

  1. Mysql逻辑架构简介

    Mysql逻辑架构简介 整体架构图 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务 ...

  2. kfaka storm写入mysql_flume+kafka+storm+mysql架构设计

    序言 前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考.这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql如果有需要测 ...

  3. mysql storm_flume+kafka+storm+mysql架构设计

    前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考. 这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql(项目是mave ...

  4. 高性能MySQL(1)——MYSQL架构

    MySQL最重要.最与众不同的特性是它的存储引擎架构,这种架构将查询处理与数据的存储/提取相分离,使得可以在使用时根据不同的需求来选择数据存储的方式. 一.Mysql逻辑架构 如果能在头脑中构建出一幅 ...

  5. MySql 学习笔记-Mysql架构介绍与查询sql执行流程

    最近花了99元大洋在极客时间 买了 MySQL 实战45讲.学习的同时留下点笔记.该内容仅仅是个人总结笔记,如有涉及版权还请告知. MySql 的简介 MySQL是一个关系型数据库管理系统,由瑞典My ...

  6. kfaka storm写入mysql_基于Storm+Kafka+Zookeeper锁+Memcached+mysql架构全方位系统Storm项目案例实战...

    基于Storm+Kafka+Zookeeper锁+Memcached+mysql架构全方位系统Storm项目案例实战 适应人群 有一定Storm基础.Kafka基础.Memcached基础.Zooke ...

  7. 【建议收藏】15755字,讲透MySQL性能优化(包含MySQL架构、存储引擎、调优工具、SQL、索引、建议等等)

    0. 目录 1)MySQL总体架构介绍 2)MySQL存储引擎调优 3)常用慢查询分析工具 4)如何定位不合理的SQL 5)SQL优化的一些建议 1 MySQL总体架构介绍 1.1 MySQL总体架构 ...

  8. 第1节 MySQL 架构篇 2021-12-24

    Java组件总目录 MySQL 架构篇 Java组件总目录 一.mysql文件结构 1. 日志文件(顺序IO) 1)错误日志(errorlog) 2)二进制日志(bin log) 3)通用查询日志(g ...

  9. MySQL架构介绍(一)

    1.简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 ...

最新文章

  1. 百度计算生物研究登上Nature子刊!将3D结构引入分子表征,结果超越斯坦福MIT,已落地制药领域...
  2. linux下载tomcat7命令,linux下安装tomcat7.0
  3. 近期北京动点软件发现XXX公司盗用我公司WPF项目案例
  4. xamarin textview 滚动_Apple Music有原生滚动歌词了!喜大普奔!
  5. 团子大家族(clannad)
  6. shiro 删除用户session_我的shiro之旅: 十二 shiro 踢出用户(同一用户只能一处登录)...
  7. 信号与系统 chapter2 冲激偶函数与阶跃函数
  8. day5 模拟用户登录
  9. 记录docker-Skywalking集成es7异常处理
  10. Jmeter获取性能指标
  11. Linux 主机规划与磁盘分区
  12. WPE制作游戏外挂 更改封包
  13. 红黑树 一张导图解决红黑树全部插入和删除问题 包含详细操作原理 情况对比
  14. Excel中排序和筛选
  15. SVN如何建立版本库
  16. hadoop系列四:mapreduce的使用(二)
  17. linux挂载ntfs格式分区,Linux上挂载NTFS分区(Mount)
  18. 推荐一个可以做历年蓝桥杯真题的网站
  19. 满足互动、发出用户民意的BBS论坛
  20. docker容器下载vim

热门文章

  1. 微信小程序评论/留言功能,附:前端+后端代码+视频讲解!
  2. linux查看dns命令
  3. 泛型学习笔记:泛型使用的注意点、泛型在继承方面的体现、自定义泛型结构、泛型应用举例、通配符
  4. 学习笔记2011.11.8-张飞-硬件开发与设计实战-门控开关设计
  5. Mysql语句计算文本字数_使用SQL确定文本字段的字数统计
  6. 大学物理实验长度的测量实验报告_大学物理实验长度的测量实验总结
  7. 巴西龟饲养日志----肺炎治疗情况
  8. 推荐收藏 | 100个数据分析常用指标和术语
  9. linux安装debian桌面,在Debian 10 Buster上安装Cinnamon桌面环境的方法
  10. Python批量修改图片名称,格式,并批量量化