您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關如何搭建MySQL邏輯架構,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
如果能在頭腦中構建出一幅MySQL各組件之間如何協同工作的架構圖,就會有助于深入理解MySQL服務器
第一層的服務并不是MySQL所獨有的,大多數基于網絡的客戶端、服務器的工具或者服務都有類似的架構。比如連接處理、授權認證、安全等等。這里的客戶端可以理解為PHP,python,java
第二層架構是MySQL大多數核心服務功能,包括查詢解析,分析,優化,緩存以及所有的內置函數(日期,時間,數字和加密函數)所有跨存儲引擎的功能都在這一層實現:存儲過程,觸發器,視圖等
第三層包含了存儲引擎。存儲引擎負責MySQL中數據的存儲和提取。和GNU/Linux下的各個文件系統一樣,每個存儲引擎都有它的優勢和劣勢。服務器通過api與存儲引擎進行通信。這些接口屏蔽了不同存儲引擎之間的差異,使得這些差異對上層的查詢過程透明。存儲引擎API包含幾十個底層函數,用于執行諸如“開始一個事物”或者“根據主鍵提取一行記錄”但是存儲引擎不會去解析SQL,不同的存儲引擎也不會相互通信,而只是簡單地響應上層服務器的請求。
通過命令net start mysql(windows) / service mysql start(linux)啟動MySQL服務
調用初始模塊;初始化模塊就是在數據庫啟動的時候,對整個數據庫做的一些初始化操作,比如各種系統環境變量的初始化,各種緩存,存儲引擎初始化設置等。
核心api:MySQL數據庫核心api主要實現了數據庫底層操作的優化功能,其中主要包括IO操作、格式化輸出、高性能存儲數據結果算法的優化,字符串的處理,其中最重要的是內存管理。
用戶發送一條SQL,這個時候會被網絡交互模塊監聽到用戶的操作請求,傳遞給‘連接管理模塊’
接收到請求轉發到‘進/線程連接模塊’
調用‘用戶模塊’來進行權限檢測(訪問數據庫的權限)
通過檢測之后就會去‘連接進/線程模塊’從‘線程連接池’中查找空閑的被緩存的連接線程和客戶端請求對接,如果失敗則創建一個新的連接請求
返回連接線程
網絡交互模塊:對外提供可以接收和發送數據的api接口,其他模塊需要交互的時候,可以通過api接口調用
連接管理模塊、進/線程連接模塊、線程連接池:連接管理模塊負責監聽MySQL Server的各種請求,根據不同的請求,然后轉發到線程管理模塊,每個客戶請求都會被數據庫自動分配一個獨立的線程為其單獨服務,而連接線程的主要工作就是負責MySQL Server與客戶端通信,線程管理模塊負責管理這些生成的線程。
在用戶權限校驗成功之后,并且獲得新的連接池之后就會去‘命令分發器’,判斷命令的類型如果是select就會去訪問‘查詢緩存’,如果沒有就會往下執行;
如果是select,并且開啟’查詢緩存’之后就會去緩存中查詢是否有與之相匹配的SQL,如果有就會校驗用戶訪問該數據的權限,通過就返回不通過就會返回錯誤信息. 如果數據沒有就會往下執行
會記錄過程中的SQL操作過程到日志文件中
在第8,9步 沒有滿足相應條件之后往下執行進入 ‘命令解析器’,經過詞法分析,語法分析后生成解析樹
根據操作轉到對應的模塊處理(預處理階段),根據SQL選擇執行的模塊
模塊收到請求后,通過’訪問控制模塊’檢查所連接的用戶是否有訪問目標表和目標字段的權限(是指訪問這些數據的權限)
有權限’表管理模塊’先查看table cache中是否存在,有則直接對應的表和獲取鎖,負責重新打開表文件
根據表的ENGINE數據,獲取表的存儲引擎類型等信息
通過接口調用對應的存儲引擎處理
返回查詢之后數據內容
用戶模塊:主要功能是用于控制用戶登入連接的權限和用戶授權管理。
訪問控制模塊:主要用于監控用戶的每一個操作。訪問控制模塊實現的功能就是根據用戶模塊中不同的用戶授權,以及根據其數據庫的各種約束來控制用戶對數據的訪問。用戶模塊和訪問控制模塊結合起來,就組成了MySQL數據庫的權限管理功能。
查詢優化器:這個模塊主要是講客戶端發送的查詢請求,在之前算法的基礎上分析,計算出一個最優的查詢策略,優化之后會提高查詢訪問的速度,最后根據其最優策略返回查詢語句。
表變更管理模塊:主要負責完成DML和DDl的查詢,列如,insert,update,delete,create table,alter table等語句處理。
表維護模塊:主要用于檢測表的狀態,分析,優化表結構,以及修復表。
復制模塊:復制模塊分為Master模塊和Slave模塊兩部分。Master模塊主要負責復制環境中讀取Master端的binary日志,以及Slave端的I/O線程交互等工作。
狀態模塊:在客戶端請求系統狀態的時候,系統狀態模塊主要負責將各種狀態的數據返回給用戶。最常用的一些查詢狀態的命令包括show status,show variable等,都是通過這個模塊負責返回的。
表管理模塊:主要就是維護系統生成的表文件。列如MyISAM存儲引擎就生成frm,myd,myi文件,維護這些文件,將這個表結構的信息緩存起來,另外該模塊還管理表級別的鎖。
存儲引擎接口模塊:MySQL實現了其數據庫底層存儲引擎的插件式管理,將各種數據處理高度抽象化。
命令執行完了之后,將結果集返回給’理解進/線程模塊’(返回的也可以是相應標識,成功失敗)
'理解進/線程模塊’進行后續的清理工作,并繼續等待請求或斷開與客戶端的連接
以上就是如何搭建MySQL邏輯架構,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。