连接管理模块负责监听MySQL Server的各种请求,根据不同的请求,然后转发到线程管理模块,每个客户请求都会被数据库自动分配-一个 独立的线程为其单独服务,而连接线程的主要工作就是负责MySQLServer与客户端通信,线程管理模块负责管理这些生成的线程。
8.转发模块
客户端连接MySQL之后会发送一些查询语句, 在MySQL Server里面,连接线程接收到客户端的一 个请求后,会直接将查询转发到各个对应的处理模块。转发模块主要就是根据查询语句语法分析,然后转发给不同的模块处理。
9.缓存模块
查询缓存模块主要功能是将客户端查询的请求返回的结果集到缓存中,与查询的一一个HASH值对应。在查询的基表发生任何数据变化后,MySQL 会自动将其查询的缓存失效。在读写比例非常高的应用系统中,查询缓存对性能的提高是非常显著的。
10.优化器模块
这个模块主要是将客户端发送的查询请求,在之前算法的基础上分析,计算出一个最优的查询策略,优化之后会提高查询访问的速度,最后根据其最优策略返回查询语句。
11.表变更管理模块
表变更管理模块主要负责完成DML和DDL的查询,例如,insert, update, delete, create,table, alter table等语句的处理。
12.表维护模块
表维护模块主要用于检测表的状态,分析、优化表结构,以及修复表。
13.系统状态管理模块
在客户端请求系统状态的时候,系统状态模块主要负责将各种状态的数据返回给用户。最常用的一-些查询状态的命令包括show satus, show variables等,都是通过这个模块负责返回的。
14.表管理器
表管理器主要就是维护系统生成的表文件。例如,MyISAM存储引擎类型表生成的是fm文件、MYD文件以及MYI文件,表管理器的工作就是维护这些文件,将各个表结构的信息缓存起来,另外该模块还管理表级别的锁。
15.日志记录模块
日志记录模块主要负责整个数据库逻辑层的日志文件,其中包含错误日志,二进制日志,以及慢查询日志等。
16.复制模块
复制模块分为Master 模块和Slave 模块两部分。Master 模块主要负责复制环境中读取Master端的binary日志,以及Slave端的I/0 线程交互等工作。Slave 模块主要有两个线程,一个负责从Master请求和接收binary日志,并写入本地I/0线程:另一个从relay log读取日志事件,然后解析成可以在Slave端执行的命令,然后交给Slave端的SQL线程。
17.存储引擎接口模块
MySQL实现了其数据库底层存储引擎的插件式管理,将各种数据处理高度抽象化。
MySQL 物理文件的组成
=============
MySQL的物理文件包括日志文件、数据文件和其他文件,下 面将详细介绍这些文件的义和作用。
1、日志文件
在MySQL数据库中,日志文件主要记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和InnoDB引擎在线Redo日志等。
(1)错误日志: Error Log
错误日志文件记录了MySQL Server运行过程中遇到的所有严重的错误信息,以及MySQL每次启动和关闭的详细信息。默认情况下错误日志功能是关闭的,启动时要重新配置——og- er(-file_ name]选项,修改错误日志存放的目录和文件名称。
(2)二进制日志: Binary Log
二进制日志文件就是常说的binlog。二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录在日志文件中,其中还包括每条语句所执行的时间和所消耗的资源,以及相关的事务信息。
默认情况下二进制日志功能是开启的,启动时可以重新配置-log_bin[-file. _name]选项,修改二进制日志存放的目录和文件名称。
(3)查询日志: Query Log
默认的查询日志文件是hostname.log.查询日志记录所有的查询操作,包括所有的select操作信息,体积比较大,开启后对性能有较大的影响,可以通过“–log[-file_ name]" 选项开启。如果需要跟踪某些特殊的SQL性能问题,可以短暂地打开该功能。
(4)慢查询日志: Slow Query Log
慢查询日志是指所有SQL 执行的时间超过long_ query, fime变量的语句和达到min_ _examined_ row_ limit 条距离的语句。用户可以针对这部分语句性能调优。慢查询日志通过
设置–log-slow_ queries[-file_ name]选项开启后,将记录日志所在的路径和名称。MySQL系统默认的慢查询日志的文件名是hostname-slow.log,默认目录也是data目录。查看慢查询日志可以采用mysqldumpslow命令对慢查询日志进行分析。
(5) InoDB引擎在线Redo日志: InnoDB redo Log
InnoDB引擎在线Redo日志记录了InnoDB所做的所有物理变更和事务信息。通过Redo日志和Undo信息,InnoDB 大大地加强了事务的安全性。InnoDB 在线Redo日志默认存放在data目录下面,可以通过设置innodb. _log_ group. home. _dir 选项来更改日志的存放位置,通过innodb. _log_ files. _in. group 选项来设置日志的数量。
2、数据文件
MySQL数据库会在data目录下面建立一个以数据库为名字的文件夹,用来存储数据库中的表文件数据。不同的数据库引擎,每个表的扩展名也不一一样, 例如,MyISAM引擎用“.MYD"作为扩展名,InnoDB 引擎可以用“.ibd”作为扩展名,CSV引擎使用“.csv" 扩展名。
(1). “.frm"文件
无论是哪种存储引擎,创建表之后就一定会生成- 一个以表名命名的“.frm"文件。fm文
件主要存放与表相关的数据信息,主要包括表结构的定义信息。当数据库崩溃时,用户可以通
过fm文件来恢复数据表结构。
(2).“.MYD" 文件
MyISAM存储引擎创建表时,每-一个MyISAM类型的表都会有一个“.MYD”文件与之对应。“MYD"文件主要用来存放数据表的数据文件。
(3)“.MYI" 文件
每一个MyISAM类型的表都会有一个“.MYD"文件和-一个“.MYI"文件,对于MyISAM存储引擎来说,可以被缓存的内容主要就是源于“.MYI”文件中,“.MYI"文件中主要用来存储表数据文件中任何索引的数据树。
(4)“.ibd" 文件和“.ibdata"文件
这两种文件主要是用来存储InnoDB 存储引擎的数据,其中主要包括索引信息。InnoDB存储引擎采用这两种数据文件,主要是因为InnoDB存储引擎的存储方式能够通过配置来决定是采用共享表空间,还是采用独享表空间的存储方式存储数据。
如果采用共享表空间的方式存储数据,则会采用ibdata文件来存储,所有的表共同使用一个或者多个ibdata 文件。如果采用独享表空间的方式存储数据,则会采用ibd文件来存储。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!