詳細介紹mysql理論和基礎知識

本篇文章給大家詳細介紹mysql理論和基礎知識。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

詳細介紹mysql理論和基礎知識

mysql架構

一、網絡連接層

客戶端連接器(Client Connectors):提供與MySQL服務器建立的支持。目前幾乎支持所有主流 的服務端編程技術,例如常見的 Java、C、Python、.NET等,它們通過各自API技術與MySQL建立連接

二、服務層(MySQL Server)

服務層是MySQL Server的核心,主要包含系統管理和控制工具、連接池、SQL接口、解析器、查詢優化器和緩存六個部分。

連接池(Connection Pool):負責存儲和管理客戶端與數據庫的連接,一個線程負責管理一個連接。

系統管理和控制工具(Management Services & Utilities):例如備份恢復、安全管理、集群 管理等

SQL接口(SQL Interface):用于接受客戶端發送的各種SQL命令,并且返回用戶需要查詢的結 果。比如DML、DDL、存儲過程、視圖、觸發器等。

解析器(Parser):負責將請求的SQL解析生成一個”解析樹”。然后根據一些MySQL規則進一步 檢查解析樹是否合法。

查詢優化器(Optimizer):當“解析樹”通過解析器語法檢查后,將交由優化器將其轉化成執行計 劃,然后與存儲引擎交互。

select uid,name from user where gender=1;

選取–》投影–》聯接 策略

1)select先根據where語句進行選取,并不是查詢出全部數據再過濾

2)select查詢根據uid和name進行屬性投影,并不是取出所有字段

3)將前面選取和投影聯接起來最終生成查詢結果

緩存(Cache&Buffer): 緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,權限緩 存,引擎緩存等。如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。

三、存儲引擎層(Pluggable Storage Engines)

存儲引擎負責MySQL中數據的存儲與提取,與底層系統文件進行交互。MySQL存儲引擎是插件式的, 服務器中的查詢執行引擎通過接口與存儲引擎進行通信,接口屏蔽了不同存儲引擎之間的差異 ?,F在有 很多種存儲引擎,各有各的特點,最常見的是MyISAM和InnoDB。

四、系統文件層(File System)?

該層負責將數據庫的數據和日志存儲在文件系統之上,并完成與存儲引擎的交互,是文件的物理存儲層。主要包含日志文件,數據文件,配置文件,pid 文件,socket 文件等。

日志文件

錯誤日志(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%’; //時長

配置文件

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

數據文件

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。

InnoDB和MyISAM

事務和外鍵

InnoDB支持事務和外鍵,具有安全性和完整性,適合大量insert或update操作?

MyISAM不支持事務和外鍵,它提供高速存儲和檢索,適合大量的select查詢操作

鎖機制

InnoDB支持行級鎖,鎖定指定記錄。基于索引來加鎖實現。

MyISAM支持表級鎖,鎖定整張表。

索引結構

InnoDB使用聚集索引(聚簇索引),索引和記錄在一起存儲,既緩存索引,也緩存記錄。

MyISAM使用非聚集索引(非聚簇索引),索引和記錄分開。

并發處理能力

MyISAM使用表鎖,會導致寫操作并發率低,讀之間并不阻塞,讀寫阻塞。

InnoDB讀寫阻塞可以與隔離級別有關,可以采用多版本并發控制(MVCC)來支持高并發

存儲文件

InnoDB表對應兩個文件,一個.frm表結構文件,一個.ibd數據文件。InnoDB表最大支持64TB;

MyISAM表對應三個文件,一個.frm表結構文件,一個MYD表數據文件,一個.MYI索引文件。從 MySQL5.0開始默認限制是256TB。

Redo Log和Binlog區別

Redo Log是屬于InnoDB引擎功能,Binlog是屬于MySQL Server自帶功能,并且是以二進制 文件記錄。

Redo Log屬于物理日志,記錄該數據頁更新狀態內容,Binlog是邏輯日志,記錄更新過程。

Redo Log日志是循環寫,日志空間大小是固定,Binlog是追加寫入,寫完一個寫下一個,不 會覆蓋使用。

Redo Log作為服務器異常宕機后事務數據自動恢復使用,Binlog可以作為主從復制和數據恢 復使用。Binlog沒有自動crash-safe能力。

在應用中可以在從庫追加多個索引來優化查詢,主庫這些索引可以不加,用于提升寫效率。

讀寫分離方案

1寫后立刻讀

在寫入數據庫后,某個時間段內讀操作就去主庫,之后讀操作訪問從庫。

2二次查詢

先去從庫讀取數據,找不到時就去主庫進行數據讀取。該操作容易將讀壓力返還給主庫,為了避免 惡意攻擊,建議對數據庫訪問API操作進行封裝,有利于安全和低耦合。

3根據業務特殊處理

根據業務特點和重要程度進行調整,比如重要的,實時性要求高的業務數據讀寫可以放在主庫。對 于次要的業務,實時性要求不高可以進行讀寫分離,查詢時去從庫查詢。

相關推薦:《mysql教程

以上就是詳細介紹

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享