• MySQL深度剖析系列


    一. 整体介绍

    1. 背景和工具介绍

    (1). MySQL的地位

     MySQL 在整个数据库图谱中占有非常重要的地位。据全球著名分析公司 Gartner 提供的数据,已有超过 63% 的用户已经部署或者将要部署 MySQL。

     目前国内大部分互联网公司都选择 MySQL 数据库来支撑自己的业务,例如,你所熟知的腾讯、阿里、百度、头条、美团、滴滴、快手、携程、去哪儿网等等公司都有大规模的 MySQL 集群。

    (2). MySQL常用客户端工具

     Window : MySQL WorkBench, Navicat, SQLyog,HeidiSQL,MySQL Front

     Linux:MySQL WorkBeanch, Navicat

     MacOS:Navicat、Sequel Pro

    2.  环境准备

     (1). MySQL的Windows版exe下载地址:https://dev.mysql.com/downloads/windows/installer/8.0.html

     (2). MySQL的Windows版zip下载地址:https://dev.mysql.com/downloads/mysql/

     (3). MySQL的Linux标准版下载地址:https://dev.mysql.com/downloads/mysql/

     

    3. MySQL的起源和分支

    (1). 发展历史

    (2). 分支结构 

      如下图,来看一下 MySQL 的主流分支。MySQL 从最初的 1.0、3.1 到后来的 5.0,发生了各种各样的变化。被 Oracle 收购后,MySQL 的版本其实主要有几个分支,除了需要付费的 MySQL 企业版本,还有很多 MySQL 社区版本。

     当然,第一条分支肯定是已经更新到 8.0 的 MySQL 官方版本。还有一条分支非常流行的开源分支版本叫 Percona Server,它是 MySQL 的技术支持公司 Percona 推出的,也是在实际工作中经常碰到的。Percona Server 在 MySQL 官方版本的基础上做了一些补丁和优化,同时推出了一些工具。另外一个非常不错的版本叫 MariaDB,它是 MySQL 的公司被 Oracle 收购后,MySQL 的创始人 Monty 先生,按原来的思路重新写的一套新数据库,同时也把 InnoDB 引擎作为主要存储引擎,也算 MySQL 的分支。

     

    4. MySQL的体系架构

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

    (1). 网络连接层

     客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。

    (2). 服务层

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

     A. 连接池(Connection Pool):负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。

     B. 系统管理和控制工具(Management Services & Utilities):例如备份恢复、安全管理、集群管理等

     C. SQL接口(SQL Interface):用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML、DDL、存储过程、视图、触发器等。

     D. 解析器(Parser):负责将请求的SQL解析生成一个"解析树"。然后根据一些MySQL规则进一步检查解析树是否合法。

     E. 查询优化器(Optimizer):当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划,然后与存储引擎交互。

     F. 缓存(Cache&Buffer): 缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,权限缓存,引擎缓存等。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

    (3). 存储引擎层

     存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异 。现在有很多种存储引擎,各有各的特点,最常见的是MyISAM和InnoDB。

    (4). 系统文件层

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

    A. 日志文件

     错误日志(Error log)默认开启,show variables like '%log_error%'

     通用查询日志(General query log),记录一般查询语句,show variables like '%general%';

     二进制日志(binary log),记录了对MySQL数据库执行的更改操作,并且记录了语句的发生时间、执行时长;但是它不记录select、show等不修改数据库的SQL。主要用于数据库恢复和主从复制。

    show variables like '%log_bin%'; //是否开启
    
    show variables like '%binlog%'; //参数查看
    
    show binary logs;//查看日志文件

     慢查询日志(Slow query log),记录所有执行时间超时的查询SQL,默认是10秒。

    show variables like '%slow_query%'; //是否开启
    
    show variables like '%long_query_time%'; //时长

    B. 配置文件

     用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。

    C. 数据文件

      db.opt 文件:记录这个库的默认使用的字符集和校验规则。

      frm 文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm 文件。

      MYD 文件:MyISAM 存储引擎专用,存放 MyISAM 表的数据(data),每一张表都会有一个.MYD 文件。

      MYI 文件:MyISAM 存储引擎专用,存放 MyISAM 表的索引相关信息,每一张 MyISAM 表对应一个 .MYI 文件。

      ibd文件和 IBDATA 文件:存放 InnoDB 的数据文件(包括索引)。InnoDB 存储引擎有两种表空间方式:独享表空间和共享表空间。独享表空间使用 .ibd 文件来存放数据,且每一张InnoDB 表对应一个 .ibd 文件。共享表空间使用 .ibdata 文件,所有表共同使用一个(或多

     个,自行配置).ibdata 文件。

      ibdata1 文件:系统表空间数据文件,存储表元数据、Undo日志等 。

      ib_logfile0、ib_logfile1 文件:Redo log 日志文件。

     pid 文件

      pid 文件是 mysqld 应用程序在 Unix/Linux 环境下的一个进程文件,和许多其他 Unix/Linux 服务端程序一样,它存放着自己的进程 id。

     socket 文件

      socket 文件也是在 Unix/Linux 环境下才有的,用户在 Unix/Linux 环境下客户端连接可以不通过TCP/IP 网络而直接使用 Unix Socket 来连接 MySQL。

     

    二. 系列章节

    目录1:基础篇

              第一节:MySQL5.7的安装(win、linux、docker) 

              第二节:MySQL修改、重置密码(win、linux) 和 Navicat Premium 15的破解

              第三节:MySQL的授权和认证详解(指令+客户端)

              第四节:MySQL的备份和恢复详解-待补充

              第五节:MySQL的数据类型和存储引擎介绍

              第六节:MySQL字符集和排序规则详解

              第七节:MySQL之Create、Update、Insert、Delete等指令详解(DB、表、视图)-待补充

              第八节:MySQL之Select指令详解和相关练习

              第九节:MySQL之存储过程、触发器、游标详解-未完

              第十节:MySQL事务与锁机制详解-未完

              第十一节:EFCore连接MySQL各种场景深度剖析测试

              第x节:xxxxxxxxxxxxxxxxxxxxxx

              第x节:xxxxxxxxxxxxxxxxxxxxxx

     

    目录2:性能优化篇

              第一节:MySQL索引简介和执行计划剖析

              第二节:MySQL索引的底层数据结构原理剖析(二叉树、 红黑树、Hash、B-Tree、B+Tree)

              第三节:MySQL索引优化规则套路实战1(索引分析、索引失效、查询优化)

              第四节:MySQL索引优化规则套路实战2(索引规则、索引选择性、前缀索引)

              第四节:xxxxxxxxxxxxxxxxxxxxxx

              第五节:xxxxxxxxxxxxxxxxxxxxxx

              第x节:xxxxxxxxxxxxxxxxxxxxxx

    目录3:高并发高可用篇(放到二期更新)

              第一节:表分区

              第二节:分库分表

              第三节:主从复制

              第四节:高可用架构MyCat

              第五节:高可用架构 Atlas、MHA、MMM等

              第六节:xxxxxxxxxxxxxxxxxxxxxx

              第x节:xxxxxxxxxxxxxxxxxxxxxx

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/13956150.html
Copyright © 2020-2023  润新知