此篇博客爲原創,歡迎轉載,轉載時請註明出處,謝謝mysql
最近深刻學習了一下mysql的內容,想把本身的理解分享出來.sql
Connectors:鏈接器數據庫
Management Service & Utillties :系統管理和控制工具緩存
Connection Pool:鏈接池安全
管理緩衝用戶鏈接,線程處理等須要緩存的需求。 負責監聽對 MySQL Server 的各類請求,接收鏈接請求,轉發全部鏈接請求到線程管理模塊。每 一個鏈接上 MySQL Server 的客戶端請求都會被分配(或建立)一個鏈接線程爲其單獨服務。 而鏈接線程的主要工做就是負責 MySQL Server 與客戶端的通訊,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些鏈接線程。包括線程的建立,線程的 cache 等。數據結構
SQL Interface:sql接口架構
接受用戶的SQL命令,而且返回用戶須要查詢的結果。好比select from就是調用SQL Interface併發
Parser:解析器mvc
SQL命令傳遞到解析器的時候會被解析器驗證和解析。 主要功能: a . 將SQL語句進行語義和語法的分析,分解成數據結構,而後按照不一樣的操做類型進行分類,而後作出 針對性的轉發到後續步驟,之後SQL語句的傳遞和處理就是基於這個結構的。 b. 若是在分解過程當中遇到錯誤,那麼就說明這個sql語句是不合理的。工具
optimizer:優化器
SQL語句在查詢以前會使用查詢優化器對查詢進行優化。explain語句查看的SQL語句執行計劃,就是由查詢優化器生成的
Caches & Buffers: 緩存
他的主要功能是將客戶端提交給MySQL的 select請求的返回結果集 cache 到內存中,與該 query 的一個 hash 值 作一個對應。該 Query 所取數據的基表發生任何數據的變化以後, MySQL 會自動使該query 的Cache 失效。在讀寫比例很是高的應用系統中, Query Cache 對性能的提升是很是顯著的。固然它對內存的消耗也是很是大的。
若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等
MyISAM | 高速引擎,擁有較高的插入,查詢速度,但不支持事務、不支持行 鎖、支持3種不一樣的存儲格式。包括靜態型、動態型和壓縮型。 |
InnoDB | 5.5版本後MySQL的默認數據庫,支持事務和行級鎖定,事務處 理、回滾、崩潰修復能力和多版本併發控制的事務安全,比 MyISAM處理速度稍慢、支持外鍵(FOREIGN KEY) |
ISAM | MyISAM的前身,MySQL5.0之後再也不默認安裝 |
MRG_MyISAM(MERGE) | 將多個表聯合成一個表使用,在超大規模數據存儲時頗有用 |
Memory | 內存存儲引擎,擁有極高的插入,更新和查詢效率。可是會佔用和 數據量成正比的內存空間。只在內存上保存數據,意味着數據可能 會丟失 |
Falcon | 一種新的存儲引擎,支持事物處理,傳言多是InnoDB的替代者 |
Archive | 將數據壓縮後進行存儲,很是適合存儲大量的獨立的,做爲歷史記 錄的數據,可是隻能進行插入和查詢操做 |
CSV | CSV 存儲引擎是基於 CSV 格式文件存儲數據(應用於跨平臺的數據 交換) |
mysql的日誌文件都是IO順序插入的,順序插入的優勢是速度快.缺點是會產生磁盤碎片
errorlog:錯誤日誌
默認是開啓的,並且從5.5.7之後沒法關閉錯誤日誌,錯誤日誌記錄了運行過程當中遇到的全部嚴重的錯誤信息,以及 MySQL每次啓動和關閉的詳細信息。
默認的錯誤日誌名稱:hostname.err。
錯誤日誌所記錄的信息是能夠經過log-error和log-warnings來定義的,其中log-err是定義是否啓用錯誤日誌的功能和錯誤日誌的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日誌中。
bin log:二進制
其中mysql-bin是binlog日誌文件的basename,binlog日誌文件的完整名稱:mysql-bin-000001.log
binlog記錄了數據庫全部的ddl語句和dml語句,但不包括select語句內容,語句以事件的形式保存,描述了數據的變動順序,binlog還包括了每一個更新語句的執行時間信息。若是是DDL語句,則直接記錄到binlog日誌,而DML語句,必須經過事務提交才能記錄到binlog日誌中。
binlog主要用於實現mysql主從複製、數據備份、數據恢復。
general query log:通用查詢日誌
因爲通用查詢日誌會記錄用戶的全部操做,其中還包含增刪查改等信息,在併發操做大的環境下會產生大量的信息從而致使沒必要要的磁盤IO,會影響mysql的性能的。如若不是爲了調試數據庫的目的建議不要開啓查詢日誌。
slow query log:慢查詢日誌
記錄執行時間超過long_query_time秒的全部查詢,便於收集查詢時間比較長的SQL語句
在數據庫調優的時候,慢查詢是一個很好的參考項
redo log:重作日誌
- 確保事務的持久性
在提交事務後,redo log buffer 中的數據會經過順序IO的方式持久化到 redo log file 中.
在數據庫發生宕機的時候,此時髒頁數據並未落盤,也就是沒有存儲到磁盤中.重啓的時候會 從redo日誌中恢復數據,確保了事務的持久性
undo log:回滾日誌
保存了事務發生的上一個版本數據,造成一個版本鏈,能夠用於回滾.
mvcc多版本併發控制中的非鎖定讀.
relay log:中繼日誌
是在主從複製環境中產生的日誌。 主要做用是爲了從機能夠從中繼日誌中獲取到主機同步過來的SQL語句,而後執行到從機中。
InnoDB數據文件
MyIsam數據文件
本篇博客從mysql邏輯架構和物理結構兩方面介紹了mysql 的整體概覽,接下來博主會一點點的把本身所理解的mysql寫出來,但願各位看官多多指點.
下一期:mysql那些事之索引