MySQL架构个人心得总结(mysql体系架构有哪几层)
sinye56 2024-10-09 19:34 9 浏览 0 评论
我们学习MySQL最重要的是理解它的架构意义,进而帮助我们了解数据库运行的底层逻辑。
以下是我学习的总结,跟大家分享一下,觉得不错的话点赞收藏起来吧
MySQL构成组件:1. MySQL服务器进程。2. 本地或远程连接的客户端程序。3.安装在本地的MySQL非客户端程序
运行原理:客户端程序连接到MySQL服务器进程进行数据请求,MySQL客户端/服务器通信并不局限于所有计算机运行相同操作系统的环境。客户端程序可以连接到运行在同一台主机上的服务器,也可以连接到运行在不同主机上的服务器,客户机/服务器通信可能发生在计算机运行不同操作系统的环境中。
举个例子:MySQL服务器进程运行在Linux上,客户端程序运行在Windows上,通过TCP/IP连接。
Mysqld:数据库服务器程序称为mysqld
MySQL Server和host(主机)不一样,是一个单一的多线程进程,管理对磁盘和内存中的数据库的访问,支持并发客户端连接,支持多存储引擎,同时支持事务性和非事务性表,通过缓存和缓冲来使用内存。
Server and Host(服务器和主机的区别)
Server:带有版本号和功能列表的(mysqld)软件程序。
Host:运行服务器程序的物理机器,包含硬件配置,网络地址,操作系统。
区别:多台服务器可以在一台主机上运行
协议:有以下四种方式。远程连接只有通过TCP/IP。
协议通过在客户端库和驱动程序中实现,连接协议的速度因本地设置而异。
关于TCP/IP的一些冷知识:全称Transmission Control Protocol/Internet Protocol。用于连接因特网上的主机的一套通信协议。通过使用IP地址或DNS主机名来识别主机,使用TCP端口号来识别每个主机上的特定服务,MySQL默认TCP端口号:3306。该协议允许不同主机之间的连接。
Socket:Linux本地通信协议。用于在同一机器上的两个进程之间形成双向通信环节的一端,要求服务器使用socket选项在本地系统上创建一个socket文件,客户端在连接时指定该socket文件,这是连接Linux的最佳方式。
MySQL and localhost的关系:当你指定某一台主机,MySQL会假设TCP协议,除非主机的名字就是本地服务器(localhost),例如主机名叫localhost的假定您正使用UNIX socket进行连接。连接到本地主机的IP地址127.0.0.1或::1:
Windows 上的本地连接协议:共享内存和命名通道。
共享内存Shared memory:通过服务器创建一个命名的共享内存块,同一主机上的客户机进程可以访问该内存块。默认情况下,共享内存是禁用的。
命名通道Named pipes:在Windows中,Named pipes的工作原理很像UNIX sockets。通过服务器创建Named pipes,客户端向其写入并从中读取。Named pipes支持读/写操作,以及在一个明确的被动的模式下的服务器应用程序。
SSL在默认情况下,在可用的地方,连接层使用安全加密的连接。如果服务器主机上安装了OpenSSL, MySQL包安装者会创建SSL密钥。安装程序调用mysql_ssl_rsa_setup实用程序来创建密钥,如果是从二进制归档文件安装,则手动调用此实用程序。在数据目录中的密钥如果可用,MySQL客户端使用SSL,将客户端密钥复制到远程客户端以启用加密的远程连接。如果SSL不可用,连接将退回到未加密状态。您可以将服务器和客户端配置为需要SSL。
线程连接原理:服务器为每个活动的客户端连接创建一个连接线程,该客户端执行的所有语句都由单个服务器线程执行。当客户端断开连接时,服务器销毁线程。“线程池”分别管理连接和服务器线程,使用线程组管理客户端连接,根据执行的事务关系区分高优先级和低优先级语句,运行事务的语句具有高优先级,使长时间运行的事务得到了改进,通过线程组中的线程执行这些语句。
SQL层
SQL层原理:连接建立后,MySQL在SQL层处理每一个查询,其中包括以下组件。
1. Parser解析器:验证查询的语法和语义,并将其转换为标准格式
2. Authorization授权:验证所连接的用户是否被允许运行查询,并且对查询所引用的对象有足够的权限。
3. Optimizer优化:为每个查询创建最佳执行计划。这涉及到决定使用哪些索引,以及以何种顺序处理表。
4. Query execution执行查询:执行每个查询计划。
5. Query cache查询缓存:用于记录查询和结果。注意:这是一个可选组件,在大多数情况下增加了相当大的开销,仅在重复执行少量相同查询的应用程序中启用查询缓存。
6. Query logging查询日志:记录服务器接收或执行的查询。
Storage Layer存储层
MySQL下的存储引擎:
1. InnoDB:默认的内置存储引擎,除非在特定的,罕见的情况下,一般都使用这个引擎,
2. 其他引擎包括MyISAM (经常在旧版系统里使用) ? MEMORY ? ARCHIVE ? BLACKHOLE ? MERGE ? CSV ? FEDERATED (默认是关闭的) ? NDBCLUSTER (在MySQL集群发行版中可用)
3. 支持第三方存储引擎
Function函数:作为在存储引擎中是充当不同表类型处理程序的服务器组件。MySQL将处理数据行的任务委托给这些存储引擎,这些存储引擎将数据存储在磁盘、内存中,或通过将其发送到网络上的其他组件,并提供索引和其他行优化。
当创建表时,需要指定哪个可用的存储引擎去管理表中的数据。表的存储引擎通常不会影响SQL层的操作,通常情况下,SQL层解析所有有效的SQL,存储层处理行操作。
在特殊情况中,即SQL语句独立于引擎。比如在创建表有一个ENGINE选项,用于指定每个表使用哪个存储引擎,修改表也有一个ENGINE选项,可以将一个表转换为使用不同的存储引擎,但是部分产品特点仅适用于部分存储引擎,像是只有InnoDB和NDB支持外键,只有InnoDB和NDB支持COMMIT(提交)和ROLLBACK(回滚)等事务控制操作,只有InnoDB和MyISAM支持全文索引(full-text indexes)。
所表现出的特性取决于存储引擎。
1. 存储介质又包括磁盘,内存,网络数据节点,Null(黑洞BLACKHOLE)四种介质。
2. 事务的能力包括具有提交和回滚的多重事务能力,隔离级别。
3. 锁定Locking:在表外的粒度级别的锁定,多版本并发控制(MVCC)。
4. 备份和恢复Backup and recovery:一些复杂的存储引擎,如InnoDB和NDB,使它们在内部保持一致性以提高性能。那是因为在运行的数据库中,文件包含的快照并不总是一致的。文件系统(原始)备份可以使用更简单的引擎。举个例子,在 MyISAM中很少有的一致性的特性,因此在数据库中,这些文件会包含一致的视图。
5. 优化Optimization:一些存储引擎使用索引、内部缓存、缓冲区和内存来优化性能
6. 与外键用作完整性的参考。
7. 全文检索
8. 空间数据
InnoDB存储引擎的高光时刻:InnoDB是MySQL的默认存储引擎,具有高可靠性和高性能,主要优点如下:
1. 事务的安全(兼容ACID)
2. MVCC(多版本并发控制)比如InnoDB精确到行级别的锁定,与oracle风格一致的非锁定读取。
3. 表数据会被安排用于基于优化主键的查询
4. 支持外键引用完整性的约束
5. 在庞大的数据量下以求获得最大性能
6. 在崩溃后,快速自动恢复
7. 在内存中,有用于缓存数据和索引的缓冲池。
其他引擎介绍:
MyISAM存储引擎的特点:
1. 在许多遗留系统中使用,在MySQL 5.5之前是默认的存储引擎
2. 快速简单,但容易会使表崩溃,经常使用REPAIR TABLE恢复崩溃的MyISAM表
3. 用.MYD和.MYI文件来存储数据和索引信息
4. 支持全文索引
5. 支持空间数据的类型和索引
6. 支持表级锁
7. 由于文件格式简单,因此支持原始表备份和恢复。
MEMORY存储引擎的特点:
1. 把行数据和索引存储在内存中,在服务器重启后,数据无法保存,唯一的磁盘上的人工产物是表的. from文件。
2. 以固定长度格式存储行。
3. 用the --max-heap-table-size option(选项)去限制表的大小。该选项以旧的存储引擎HEAP去命名的
4. 支持表级锁
5. 不能存储TEXT或BLOB列
ARCHIVE 存储引擎用于以压缩格式存储大量数据,允许占用非常小的内存。它有这些主要特征:
1. 以. from文件形式表示
2. 把数据和元数据存储在.ARZ和.ARM文件中
3. 不支持索引
4. 支持INSERT和SELECT,但不支持DELETE, REPLACE或UPDTAE
5. 支持ORDER BY操作和BLOB列
6. 接受除空间数据类型外的所有数据类型
7. 使用行级锁
8. 支持AUTO_INCREMENT列(自增长列)
BLACKHOLE 存储引擎的特点:
1. 充当空存储引擎,它接受数据,但不存储数据,用它检索总是返回一个空结果,唯一的磁盘上的人工产物是表的. from文件。
2. 支持所有类型的索引
3. 在一些特定的情况下有用,例如在主从复制中,接替从服务器记录并转发复制的日志,但不存储数据。
4. 验证备份和转储文件的语法
5. 发现与存储引擎无关的性能瓶颈,例如测量二进制日志的日常消耗”
磁盘空间:
磁盘空间的主要用途是作为数据目录。数据目录的位置是可配置的,Linux的默认位置是/var/lib/mysql。服务器日志文件和状态文件包含服务器正在处理的语句的信息。日志用于故障排除、监控、复制和恢复。所有数据库的InnoDB日志文件都位于数据目录级别。
InnoDB系统表空间包含数据目录、undo日志和缓冲区,不管数据库中的表使用的存储引擎是什么,每个数据库在数据目录下都有一个目录。
目录下包含以下:
1. 数据文件:例如InnoDB存储引擎特定的数据文件.ibd,当然还可以分区包括数据文件、元数据或索引信息在内的数据文件,这取决于使用的存储引擎
2. 格式文件(.frm): 包含每个表和/或视图结构的描述,位于相应的数据库目录中。
3. 触发器Triggers (.trg and .trn): 与表关联,并在表发生特定事件时,激活的已命名数据库对象。.trg文件将触发器链接到表(每个表一个触发器), trn文件存储触发器信息(每个触发器一个)。
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)