热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【干货来袭】MySQL架构总结

点击上方蓝色文字关注我们MySQL构成组件:1.MySQL服务器进程2.本地或远程连

点击上方蓝色文字关注我们



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文件存储触发器信息(每个触发器一个)。



往期回顾


1.孟晚舟事件折射出5G技术有多重要

2.腾讯云TDSQL赤兔运营平台创建实例卡死不动问题分析解决

3.MySQL 源码安装零基础实操


4.腾讯云TDSQL监控库密码忘记问题解决实战‍


点击 "阅读原文"



推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
author-avatar
守护雪天_使0062_423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有