MySQL架構的那些事

MySQL架構的那些事

最近深入學習了一下mysql的內容,想把自己的理解分享出來.

mysql架構

邏輯架構



MySQL架構的那些事


  • Connectors:連接器
  • Management Service & Utillties :系統管理和控制工具
  • Connection Pool:連接池 管理緩衝用戶連接,線程處理等需要緩存的需求。 負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每 一個連接上 MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程為其單獨服務。 而連接線程的主要工作就是負責 MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的 cache 等。
  • SQL Interface:sql接口 接受用戶的SQL命令,並且返回用戶需要查詢的結果。比如select from就是調用SQL Interface
  • Parser:解析器 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架構的那些事



物理結構

  • MySQL是通過文件系統對數據和索引進行存儲的
  • MySQL從物理結構上可以分為日誌文件和數據索引文件
  • MySQL在Linux中的數據索引文件和日誌文件都在/var/lib/mysql目錄下。
  • 日誌文件採用順序IO方式存儲、數據文件採用隨機IO方式存儲。

日誌文件

​ 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數據文件

  • .frm文件:主要存放與表相關的數據信息,主要包括表結構的定義信息
  • .ibd:使用獨享表空間存儲表數據和索引信息,一張表對應一個ibd文件
  • .ibdte:使用共享表空間存儲表數據和索引信息,所有表共同使用一個或者多個ibdata文 件

MyIsam數據文件

  • .frm文件:主要存放與表相關的數據信息,主要包括表結構的定義信息
  • .myd文件:主要用來存儲表數據信息。
  • .myi文件:主要用來存儲表數據文件中任何索引的數據樹。

本篇博客從mysql邏輯架構和物理結構兩方面介紹了mysql 的總體概覽,接下來博主會一點點的把自己所理解的mysql寫出來,希望各位看官多多指點.


作者:sx_wuyj
鏈接:https://juejin.im/post/5e73327c6fb9a07caf447d2a
來源:掘金
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


分享到:


相關文章: