《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第1章,第1.2节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第1章 理解MySQL 1.2MySQL 的基础架构和版本 1.2.1 软件架构中数据库的定位 数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示、应用逻辑的处理都是由其他层次的程序来实现的。

本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第1章,第1.2节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第1章 理解MySQL

1.2MySQL 的基础架构和版本

1.2.1 软件架构中数据库的定位
数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示、应用逻辑的处理都是由其他层次的程序来实现的。比较流行的一种软件架构的分类是“双层”、“三层”、“多层”架构。客户端直接和数据库服务器通信,比如通过ODBC、JDBC连接数据库,一般称为“双层架构”或“client-server”架构。若客户端和数据库之间有一个中间服务器(如Web服务器,中间件),则由中间服务器负责转发请求给数据库服务器,这种模式称为“三层架构”。在很多较大规模的Web应用中,在Web服务器和数据库服务器之间还可能存在一个应用服务器,这种结构称为“四层架构”。
本书探讨的MySQL是基于目前互联网最常见的架构,如,网站应用、移动互联网应用。它们一般是三层架构,这三层架构分别如下。
1)用户接口层,即各种终端,比如,运行在最终用户计算机上的浏览器。
2)业务逻辑和数据处理层,即应用程序服务器,比如,PHP、Java EE、ASP.NET、Ruby on Rails等应用服务。网站处理网络访问请求的过程可能是这样的:由Nginx接受用户请求,处理静态页面,并且将动态请求转发给后端的PHP服务,PHP服务处理完动态请求后,将结果返还给Nginx,Nginx再返还给用户。有时也称该层为中间件(middle ware)。
3)DBMS,即后端数据存储,如MySQL、PostgreSQL、Redis、Memcached等产品。
相应地,在软件系统架构设计中也存在一种分层设计的方法学。我们熟知的三层架构(3-tier application)是一种应用广泛的分层设计,它把应用分解为表现层、业务逻辑层、数据访问层3个层次。三层(多层)架构主要的好处是提供了一个灵活的、可重用的模型,开发者可以通过简单地修改某一层的功能或增加某一层的功能来实现某种需求,而不需要修改整个应用程序。
表现层(UI),即直接和用户交互的界面。
业务逻辑层(BLL),即对业务逻辑进行处理,处理用户的请求,它将许多最终用户的业务逻辑集中到了应用服务器上。
数据访问层(DAL),直接操作数据库,即针对数据的增加、删除、修改、查找等
操作。
传统行业的商业数据库往往还承载了许多业务逻辑的功能,这其中就会经常用到存储过程、触发器。互联网世界的开源数据库虽然也有存储过程、触发器之类的特性,但绝大部分场合下并不会用到这些非核心的基本特性,开发者把数据库更多地看作一个存储数据的容器,并已将核心业务逻辑从数据库功能中分离了出来。
本书主要是讲述MySQL的使用,由于MySQL的优化与软件整体架构的其他组件的关系密切,所以对于Web服务器、缓存产品、队列等产品,也会做一些简单介绍。作为一个合格的DBA,有必要了解各种应用服务的运行机制,以及是否需要对它们进行优化。
1.2.2 MySQL的基础架构
MySQL是一种关系数据库产品。关系数据库,顾名思义,是建立在关系模型基础上的数据库。现实世界中,实体与实体之间的各种联系一般都可以用关系模型来表示。经过数十年的发展,关系数据库在理论和工业实践中都已经很成熟了。
数据库产品的架构一般可以分为应用层、逻辑层、物理层,对于MySQL,同样可以理解为如下的3个层次。
应用层。负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)。
逻辑层。负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务管理、并发控制、存储管理。这其中,将由事务管理器来确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。
物理层。实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。
图1-1是MySQL官方文档的一个基础架构图,其中Connectors可以理解为各种客户端、应用服务;Connection Pool 可以理解为应用层,负责连接、验证等功能;Management Services & Utilities、SQL Interface、Parser、Optimizer、Caches & Buffers、Pluggable Storage Engines可以理解为数据库的大脑——逻辑层;最下方的Files& Logs可以理解为物理层。


d8700b31b8a7829397f4814cccd94b134c1db872

图1-1 MySQL的基础架构
1.2.3 MySQL的版本及特性
  1. MySQL支持的平台
    MySQL支持目前市面上的大部分平台,包括32位和64位平台,一般情况下程序运行在64位平台上比32位更快。MySQL支持的平台如下所示。

Solaris
Linux
Windows
AIX
Mac OS
HPUX

  1. MySQL许可协议?
    Oracle以双重授权(Dual Licensed)的方式发布MySQL,它们是GPL和商业许可协议(Commercial License)。如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL,无论是否将其用作商用。

如果某些商业软件中结合了MySQL或修改了MySQL源码,但又不愿意按GPL协议公开软件源码,那么就必须和Oracle公司达成商业许可协议。简而言之,如果你违反了GPL,则需要购买商业许可。
GPL授予用户以下权利。
以任何目的运行此程序的自由。
再发行复制件的自由。
改进程序,并公开发布改进内容的自由。
需要注意的是,GPL只限制了对外分发的软件,也就是说,如果该软件只在内部使用,无论开不开源都没有关系。如何使用开源软件并不受GPL的约束,只有在你基于开源软件,修改开源软件的源码时才受 GPL约束,如果你的应用程序只是用到了MySQL,无论是否商用,都不需要考虑开源。

  1. MySQL版本
    MySQL目前可分为4个版本:MySQL社区版、MySQL标准版、MySQL企业版、MySQL集群版。

(1)MySQL社区版
可免费下载使用的开源版本,遵循GPL协议,包括如下的这些特性。
可插拔的存储引擎架构
多存储引擎支持InnoDB、MyISAM、NDB(MySQL Cluster即采用NDB存储引擎)、Memory、Merge、Archive、CSV等
复制
分区
存储过程、触发器、视图
信息数据库(Information-Schema)
MySQL连接器
MySQL工作台(MySQL Workbench)
目前已经发布了MySQL 5.0、MySQL 5.1、MySQL 5.5、MySQL 5.6、MySQL 5.7一共5个GA版本。一般来说,后面的版本比前面的版本功能更强、扩展性更好。
以下3个版本是给商业用户使用的,商业客户可灵活选择多个版本,以满足特殊的商业和技术需求。
(2)MySQL标准版
和社区版差别不大,提供社区版所支持的各种特性。
(3)MySQL企业版
MySQL企业版提供7×24小时的技术支持服务,用户可直接联系MySQL专业支持工程师,获取关于MySQL应用程序开发、部署和管理的全方位支持。
MySQL企业版提供了更全面的高级功能、管理工具和技术支持,例如:MySQL企业级备份可为数据库提供在线“热”备份,从而降低数据丢失的风险。它支持完全、增量和部分备份,以及时间点恢复和备份压缩。
MySQL线程池提供了一个高效的线程处理模型,旨在降低客户端连接和语句执行线程的管理开销。
MySQL企业级安全性提供了一些立即可用的外部身份验证模块,可将MySQL轻松集成到现有的安全基础架构中。
其他特性还有MySQL企业级审计、MySQL企业级监视器(MySQL Enterprise Monitor)和MySQL查询分析器(MySQL Query Analyzer)等。
MySQL的一些新特性出现在了企业版中,但并没有出现在社区版,这导致很多人对于MySQL产生了疑虑,但MySQL的生态已经建立成熟,官方版本和其他分支也都在稳定地发展改进中,一般的中小公司选择社区版本即可。一些行业、领域要求更好的服务,更高的稳定性,或者有其他复杂的业务需求,对于它们企业版是一个很好的选择。
(4)MySQL集群(MySQL Cluster)版
Oracle收购MySQL之后,对MySQL Cluster做了大量改进,这也是Oracle力推的产品。集群版是一种分布式、无共享(share-nothing)的架构,也就是说把数据分布在各个节点的内存里。据官方宣称,集群版可比单机数据库提供更高的可用性,高达99.999%。它还有一些好处,比如自动分片、动态添加节点、支持跨IDC复制、减少维护成本等。但这个产品比较复杂,国内也缺少精通MySQL Cluster的专家,如果一定要使用,建议做好充分的测试验证工作。
据说现在的MySQL Cluster版本已经允许存储部分数据到硬盘上,但由于主要数据需要存放在内存中,因此其部署成本会比较高。另外,随着MySQL Cluster节点的增多,节点之间通信、同步的代价也越来越大,所以其扩展性也是有限的。对于海量数据,MySQL Cluster可能不是很好的方案,从理论上来讲,仅仅把热点数据加载到内存是更经济的做法。
1.2.4 MySQL的开发周期
Oracle公司是一家成熟的商业公司,拥有一流的工程能力和执行力,自收购MySQL以来,就增加了相应的开发人员,并且提供了更成熟的开发模式,目前MySQL的开发进度比收购之前高了很多,许多第三方的优化补丁也都在官方版本中得到了实现。而之前MySQL的400多名开发人员分布在25个国家,70%的开发人员在家工作,导致了交流沟通不畅,产品开发进展缓慢。
目前MySQL的发展路线更清晰,开发周期大致分为4个阶段。
1)新特性开发。
2)发布实验室版本。
实验室版本可以提前预览到一些正在开发的特性,供用户试用,但是不保证这些特性会被整合到里程碑版本和GA版本。
3)发布里程碑版本(Development Milestone Releases)。
这个时候的版本称为RC(Release Candidate候选)版本,有充分的文档支持,在所有支持的平台上发布,可以让用户试用,以收集反馈。一般平均3~6个月发布一个DMR(里程碑版本)。
4)发布GA版本(Generally Availability Releases)。
GA版本是建议用于生产系统的版本。一般18~24个月为一个周期。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
1408
分享
相关文章
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
【YashanDB知识库】如何排查YMP报错:”OCI版本为空或OCI的架构和本地系统的架构不符“
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
98 3
|
2月前
【YashanDB 知识库】如何排查 YMP 报错:”OCI 版本为空或 OCI 的架构和本地系统的架构不符“
**问题现象**:迁移预检查时,因OCI版本为空或架构不符报错。通过查看yasdts日志发现缺少libnsl.so.1依赖库。 **排查步骤**: 1. 查看日志确认缺少的依赖库。 2. 检查OCI客户端路径是否已加入LD_LIBRARY_PATH环境变量。 3. 使用`ldd`命令检查其他缺失的依赖库。 **解决方法**: 1. 下载并安装所需的动态库版本。 2. 若无法联网,查找本地是否有相应库。 3. 如本地有高版本库,创建软链接指向所需版本(如`ln -s /lib64/libnsl.so.2 libnsl.so.1`)。
|
2月前
【YashanDB 知识库】如何排查 YMP 报错:”OCI 版本为空或 OCI 的架构和本地系统的架构不符“
在迁移预检查的版本检查阶段报错“OCI 版本为空”,原因是 OCI 架构与本地系统不符或依赖库缺失。排查发现 `libdrv_oracle.so` 缺少 `libnsl.so.1` 库,尽管 OCI 客户端路径已正确加入 `LD_LIBRARY_PATH`。解决方法包括下载安装相应动态库版本,或通过软链接指向更高版本库(如 `libnsl.so.2`)。总结:确保动态库路径正确配置,并使用 `ldd` 查看依赖库,必要时创建软链接以解决问题。
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
159 12
vb6读取mysql,用odbc mysql 5.3版本驱动
通过以上步骤,您可以在VB6中使用ODBC MySQL 5.3驱动连接MySQL数据库并读取数据。配置ODBC数据源、编写VB6代码
82 32
MySQL版本升级(8.0.31->8.0.37)
本次升级将MySQL从8.0.31升级到8.0.37,采用就地升级方式。具体步骤包括:停止MySQL服务、备份数据目录、下载并解压新版本的RPM包,使用`yum update`命令更新已安装的MySQL组件,最后启动MySQL服务并验证版本。整个过程需确保所有相关RPM包一同升级,避免部分包遗漏导致的问题。官方文档提供了详细指导,确保升级顺利进行。
570 16
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
297 2
【赵渝强老师】MySQL的体系架构