加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

图文详解mysql架构原理

发布时间:2023-01-29 13:32:02 所属栏目:MySql教程 来源:转载
导读: 本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

阿米巴 mysql原理_mysql left join 原理_mysql原理

千万级数据并发如何处理?

推荐学习:mysql视频教程

Mysql 架构原理1、Mysql体系架构

MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。

image-20220515204322843

网络连接层服务层(MySQL Server)

服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。

存储引擎层(Pluggable Storage Engines)系统文件层(File System)

该层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件,数据文件,配置文件,pid 文件,socket 文件等。

通用查询日志(General query log)二进制日志(binary log)慢查询日志(Slow query log)配置文件数据文件pid 文件socket 文件2、MySQL运行机制

image-20220515211108275

建立连接(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连接。MySQL 客户端与服务端的通信方式是 “ 半双工 ”。对于每一个 MySQL 的连接,时刻都有一个线程状态来标识这个连接正在做什么。线程状态:show processlist; //查看用户正在运行的线程信息,root用户能查看所有线程,其他用户只能看自己的;Time:表示该线程处于当前状态的时间,单位是秒State:线程状态Info:一般记录线程执行的语句,默认显示前100个字符。想查看完整的使用show full processlist;查询缓存(Cache&Buffer),这是MySQL的一个可优化查询的地方,如果开启了查询缓存且在查询缓存过程中查询到完全相同的SQL语句,则将查询结果直接返回给客户端;如果没有开启查询缓存或者没有查询到完全相同的 SQL 语句则会由解析器进行语法语义解析,并生成“解析树”。show variables like ‘%query_cache%’; //查看查询缓存是否启用,空间大小,限制等show status like ‘Qcache%’; //查看更详细的缓存参数,可用缓存空间,缓存块,缓存多少等解析器(Parser)将客户端发送的SQL进行语法解析mysql原理,生成"解析树"。预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。查询优化器(Optimizer)根据“解析树”生成最优的执行计划。MySQL使用很多优化策略生成最优的执行计划,可以分为两类:静态优化(编译时优化)、动态优化(运行时优化)。优化count、min、max等函数提前终止查询in的优化查询执行引擎负责执行 SQL 语句,此时查询执行引擎会根据 SQL 语句中表的存储引擎类型,以及对应的API接口与底层存储引擎缓存或者物理文件的交互,得到查询结果并返回给客户端。若开启用查询缓存,这时会将SQL 语句和结果完整地保存到查询缓存(Cache&Buffffer)中,以后若有相同的 SQL 语句执行则直接返回结果。3、Mysql存储引擎

存储引擎在MySQL的体系架构中位于第三层,负责MySQL中的数据的存储和提取,是与文件打交道的子系统,它是根据MySQL提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎。

使用show engines命令,就可以查看当前数据库支持的引擎信息。

image-20220515211931975

在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。

InnoDB和MyISAM对比锁机制索引结构并发处理能力存储文件适用场景InnoDB总结InnoDB存储结构

从MySQL 5.5版本开始默认使用InnoDB作为引擎,它擅长处理事务,具有自动崩溃恢复的特性。下面是官方的InnoDB引擎架构图,主要分为内存结构和磁盘结构两大部分。

image-20220515212711508

InnoDB内存结构

内存结构主要包括Buffer Pool、Change Buffer、Adaptive Hash Index和Log Buffer四大组件。

改进型LRU算法维护Buffer Pool配置参数Change Buffer:写缓冲区,简称CB。在进行DML操作时,如果BP没有其相应的Page数据,并不会立刻将磁盘页加载到缓冲池,而是在CB记录缓冲变更,等未来数据被读取时,再将数据合并恢复到BP中。Adaptive Hash Index:自适应哈希索引,用于优化对BP数据的查询。InnoDB存储引擎会监控对表索引的查找,如果观察到建立哈希索引可以带来速度的提升,则建立哈希索引,所以称之为自适应。InnoDB存储引擎会自动根据访问的频率和模式来为某些页建立哈希索引。Log Buffer:日志缓冲区,用来保存要写入磁盘上log文件(Redo/Undo)的数据,日志缓冲区的内容定期刷新到磁盘log文件中。日志缓冲区满时会自动将其刷新到磁盘,当遇到BLOB或多行更新的大事务操作时,增加日志缓冲区可以节省磁盘I/O。InnoDB磁盘结构

InnoDB磁盘主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log和Undo Logs。

独立表空间(File-Per-Table Tablespaces)

通用表空间(General Tablespaces)

撤销表空间(Undo Tablespaces)

临时表空间(Temporary Tablespaces)

数据字典(InnoDB Data Dictionary)

双写缓冲区(Doublewrite Buffer)

重做日志(Redo Log)

撤销日志(Undo Logs)

新版本结构演变

image-20220515214541979

MySQL 8.0 版本InnoDB线程模型

image-20220515214958395

Purge ThreadPage Cleaner ThreadMaster Thread每10秒的操作:InnoDB数据文件InnoDB文件存储结构

image-20220515215453178

Page是文件最基本的单位,无论何种类型的page,都是由page header,page trailer和page body组成。如下图所示

image-20220515215736916

File文件格式(File-Format)

通过innodb_file_format 配置参数可以设置InnoDB文件格式,之前默认值为Antelope,5.7版本开始改为Barracuda。

Row行格式(Row_format)

image-20220515220208534

COMPACT 行格式DYNAMIC 行格式COMPRESSED 行格式

在创建表和索引时,文件格式都被用于每个InnoDB表数据文件(其名称与*.ibd匹配)。修改文件格式的方法是重新创建表及其索引,最简单方法是对要修改的每个表使用以下命令:

Undo LogUndo Log介绍Undo Log作用

实现多版本并发控制(MVCC)

image-20220515221157888

Redo Log 日志

Redo Log工作原理

image-20220515221500277

image-20220515221600311

Redo Log相关配置参数

Redo Buffer 持久化到 Redo Log 的策略,可通过 Innodb_flush_log_at_trx_commit 设置:

image-20220515221806576

Binlog日志Binlog文件名默认为“主机名_binlog-序列号”格式,例如oak_binlog-000001,也可以在配置文件中指定名称。文件记录模式有STATEMENT、ROW和MIXED三种,具体含义如下。STATMENT(statement-based replication, SBR):每一条被修改数据的SQL都会记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。MIXED(mixed-based replication, MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择写入模式。

Binlog 文件结构

image-20220515222235118

Binlog文件操作

Binlog文件操作

开启Binlog功能

使用show binlog events命令

使用 mysqlbinlog 命令

使用 binlog 恢复数据

删除Binlog文件

Redo Log和 Binlog区别

推荐学习:mysql视频教程

以上就是图文详解mysql架构原理的详细内容,更多请关注php中文网其它相关文章!

声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!