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鎖、事務隔離級別、MVCC機制詳解、間隙鎖、死鎖等

          第十一節:EFCore連接MySQL各種場景深度剖析測試

          第x節:xxxxxxxxxxxxxxxxxxxxxx

          第x節:xxxxxxxxxxxxxxxxxxxxxx

 

目錄2:性能優化篇

          第一節:MySQL索引簡介、執行計划剖析、最佳實踐入門

          第二節:MySQL索引的底層數據結構原理剖析(二叉樹、 紅黑樹、Hash、B-Tree、B+Tree)

          第三節:MySQL索引優化規則套路實戰1(索引分析、索引失效、查詢優化)

          第四節:MySQL索引優化規則套路實戰2(索引規則、索引選擇性、前綴索引)

          第五節:MySQL配置詳解和配置優化參考

          第六節:MySQL索引優化復習與加強(如何選擇、Order By和Group By、分頁優化、Join優化、Count優化)

          第x節:xxxxxxxxxxxxxxxxxxxxxx

 

目錄3:高並發高可用篇(放到二期更新)

          第一節:表分區

          第二節:分庫分表

          第三節:主從復制

          第四節:高可用架構MyCat

          第五節:高可用架構 Atlas、MHA、MMM等

          第六節:xxxxxxxxxxxxxxxxxxxxxx

          第x節:xxxxxxxxxxxxxxxxxxxxxx

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM