MySQL-02-MySQL架构
逻辑架构
mysql的架构十分复杂,我们先大概有个印象,下图就是MySQL的逻辑架构简略图:
MySQL架构总共三层,在上图中以虚线作为划分。
首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。
第二层的架构包括大多数的MySQL的核心服务(也叫Sql Layer层)。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。
MySQL系统架构图
首先,我们对该图中的各个模块做一简单介绍:
1、Connectors -连接器
mysql面向开发者的APIS,根据不同的开发环境及连接方式提供标准的驱动方式;例如,java开发常用的jdbc与odbc方式就是在选择connector连接器。
2、Connection Pool -连接池
程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
3、Management Serveices & Utilitie -系统管理和控制工具
mysql系统级别管理,DBA工作空间,主要进行数据库层面(复制、比较、差异、导出、导入)、审核日志层面、服务器层面(实例克隆、实例信息)、系统层面(磁盘使用情况、冗余索引、搜索元数据、进程)、高可用性层面(主从复制、故障转移、主从同步)等相关操作。。
4、SQL Interface
接受用户的SQL命令,并且返回用户需要查询的结果。
5、Parser 解析器
1. 词法解析
即将sql语句进行分词,例如,select * from T1,其会根据空格将语句中的词分离出来,形成语法树;
1. 语法解析
mysql依据 SQL92标准对传入的sql进行分析,例如,select * from T1如果书写错误为 elect * from T1,就会出现语法错误,无法根据语法解析成为正确的语法树;
Parser 解析器的目的就是将传入的sql最终解析为可执行的语法树;
SELECT movieTitle
FROM StarsIn
WHERE starName IN (SELECT nameFROM MovieStarWHERE birthdate LIKE ‘%1960’
)
解析为
6、 Optimizer-查询优化器
- 索引优化:开发者可以建立很多个索引,Mysql Optimizer 只使用一个,最优的那个;
- 表关联优化:遵循小关联大原则,即小表关联大表(两个for循环),即便开发者所写的sql是大表关联小表,也会调整为小表关联大表;
- where条件优化
mysql对于where条件的顺序读取是从左到右(Oracle是从右到左),首先要找到过滤力度最大的先执行,例如,where id=1 and sex=“男”,首先执行id=1,主键过滤力度最大,即便语句是 where sex=“男” and id=1,mysql 也会调整过来;
7 、Cache和Buffer -查询缓存(8.0后缓存不再用)
主要功能是将请求的返回结果集 cache 到内存中,与该 query 的一个 hash值做一个对应。该 query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等。
8 、存储引擎接口 mysql5.6默认InnerDB
MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。
详细执行图
物理架构
MySQL从物理结构上可以分为日志文件和数据索引文件。(存在目录(/var/lib/mysql)下)
其中日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。
顺序IO:记录首地址与偏移量,只存储和查询,记录速度快,只能追加数据,浪费空间,适用于日志存储;
随机IO:需要记录地址[0x9559],随机位置存入,省空间,相对慢,适用于数据和索引的存储;
日志文件
查看日志开启情况
mysql> show variables like 'log_%';
- errorlog 错误日志
运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息,默认是开启的,而且从5.5.7以后无法关闭错误日志 - bin log 二进制日志
记录数据变化,binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息;如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。每次重启都会生成一个日志文件
- general query log 通用查询日志
全面记录CRUD日志,非常耗费性能,所以生产环境不开启; - slow query log 慢查询日志
- redo log 重做日志
- undo log 回滚日志
- relay log 中继日志
配置主从过程中,从库生成的日志
数据索引文件
查询索引和数据文件位置:SHOW VARIABLES LIKE '%datadir%';
- InnoDB数据文件
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息;
.ibd:使用独享表空间存储表数据和索引信息,一张表对应一个ibd文件;(与ibdata二选一)
ibdata文件:使用共享表空间存储表数据和索引信息,所有表共用一个或者多个ibdata文件.(与ibd二选一) - MyIsam数据文件
.frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息;
.myd文件:主要用来存储表数据信息;
.myi文件:主要用来存储表数据文件中任何索引的数据树。
从下图我们可以看出Innodb和MyIsam的索引数据文件不同点
从上我们也可以看出,InnoDB是聚集索引(索引和数据在一起),而MyIsam为非聚集索引(索引和数据文件单独存储为二份)
MySQL-02-MySQL架构相关推荐
- MySQL—02—MySQL的操作
一.MySQL的操作 1. 创建与删除数据库 1.1使用命令创建数据库 创建一个 test 的数据库,并查看该数据库,以及该数据库的编码. 创建数据库: create database test d ...
- mysql的set架构_MYSQL 整体架构浅析
对于一个服务端开发来说 MYSQL 可能是他使用最熟悉的数据库工具,然而熟练掌握 MYSQL 语句的拼写和卓越的多条件查询不代表出现性能问题的时候你知道该怎么解决.致力于不当 SQL boby,我们从 ...
- MySQL高可用架构-MMM环境部署记录
MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序.MMM使用Perl语言开发,主要用来监控和管 ...
- 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡
文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...
- mysql高可用架构——MMM用群集架构
MMM群集架构概述 MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)是一套灵活的脚本程序,基于perl实现, 用来对mysql ...
- MySQL高可用架构之Percona XtraDB Cluster
简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1.同步复制,事务要么在所有节点提交或不提交. ...
- Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 【转】
文章出处:Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 [转] mysql数据库高可用高扩展性架构方案实施[原] Heartbeat+DRBD+MySQ ...
- MYSQL企业常用架构与调优经验分享
小道消息:2016爱维Linux高薪实战运维提高班全新登场,课程大纲:http://www.iivey.com/666-2 一.选择Percona Server.MariaDB还是MYSQL 1.My ...
- 迁移到MySQL的业务架构演进实战
来自:DBAplus社群 作者介绍 杨建荣,dbaplus社群联合发起人,竞技世界资深DBA,前搜狐畅游数据库专家,Oracle ACE,腾讯云TVP.具有十多年数据库开发和运维经验,目前专注于开源技 ...
- Mysql进阶(4)——基于MHA的MySQL高可用架构
前言 MySQL高可用性大杀器之MHA MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职 ...
最新文章
- 200万注册开发者,13亿张全景图片,90%数据生产环节AI化,百度地图生态全景升级2.0
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
- WKQ学习(后台知识)
- 200725学习日报循环语句和数组
- C# + .net下使用serialPort做串口开发 1
- VC6重载字体对话框,去除颜色下拉框
- ubuntu16.04搞出百度的方法
- Json和object相互转化,排除json中多余的字段
- Elasticsearch-PHP requires cURL, or a custom HTTP handler.
- Shell-修改MySQL默认root密码
- 【优化算法】磷虾群算法(KH)【含matlab源码 133期】
- 暗黑系?No...,打造一款 IDEA 护眼主题方案!
- 数据挖掘与决策支持系统的关系
- openCV实践项目:图片文本检测
- 怎么修改数据库服务器名字,sql改数据库名称
- 月下夜想曲200.6(攻略3)
- 基于C51实现数码管的显示
- python求f的倒数_Python中整数的倒数
- 我的理想200字计算机工程师,我的理想:工程师
- html学习基础(一)
热门文章
- arcgis图层的分类
- 蒋勋:衣食住行中的美
- POI文件上传文件名、目录名或卷标语法不正确
- python爬虫的使用——成语接龙小游戏
- 经验:一个秒杀系统的设计思考!
- echarts 地图_地图 json 免费下载_自定义icon
- iPhone难卖,被欧洲反垄断的服务业务也难赚钱了,苹果的日子艰难
- IPFS方得社区周欢:web3.0时代的分布式存储畅想
- 金正昆礼仪/安东尼罗宾/陈安之(为你开辟成功之路)/余世维/林伟贤 系列讲座演讲下载...
- 3D机械人模型以及场景模型是如何制作出来的?