mysql 體系結構
阿新 • • 發佈:2018-06-18
服務啟動 區分 支持 inno linux服務 ora ole mysqld unix Mysql 體系結構:
連接者:不同語言的代碼程序和mysql的交互(SQL交互)
1、連接池 --------------- 管理、緩沖用戶的連接,線程處理等需要緩存的需求
2、管理服務和工具組件
3、sql接口 --------------接受用戶的SQL命令,並且返回用戶需要查詢的結果
4、查詢解析器 ----------SQL命令傳遞到解析器的時候會被解析器驗證和解析(權限、語法結構)
5、優化器 ---------------SQL語句在查詢之前會使用查詢優化器對查詢進行優化
6、緩存 -------------------如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據
7、插入式存儲引擎------
存儲引擎說白了就是如何管理操作數據(存儲數據、如何更新、查詢數據等)的一種方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)
在Oracle 和SQL Server等數據庫中只有一種存儲引擎,所有數據存儲管理機制都是一樣的。而MySql數據庫提供了多種存儲引擎。
用戶可以根據不同的需求為數據表選擇不同的存儲引擎,用戶也可以根據自己的需要編寫自己的存儲引擎。甚至一個庫中不同的表使用不同的存儲引擎,這些都是允許的。
MySQL常用的存儲引擎:
MyISAM存儲引擎:
由於該存儲引擎不支持事務、也不支持外鍵,所以訪問速度較快。因此當對事務完整性沒有要求並以訪問為主的應用適合使用該存儲引擎。
InnoDB存儲引擎 :( mysql 5.5版本以後默認的存儲引擎)
由於該存儲引擎在事務上具有優勢,即支持具有提交、回滾及崩潰恢復能力等事務特性,所以比MyISAM存儲引擎占用更多的磁盤空間。
因此當需要頻繁的更新、刪除操作,同時還對事務的完整性要求較高,需要實現並發控制,建議選擇。
MEMORY:
MEMORY存儲引擎存儲數據的位置是內存,因此訪問速度最快,但是安全上沒有保障。適合於需要快速的訪問或臨時表。
BLACKHOLE:
黑洞存儲引擎,寫入的任何數據都會消失,可以應用於主備復制中的分發主庫。
8、物理文件:
日誌文件,數據文件,配置文件,pid文件,socket文件等
mysql中的邏輯對象:
mysqld_process+memory+datafile--->庫-->表-->記錄(由行與列組成)
區分數據庫、數據庫實例、數據庫服務器:
數據庫(database):
操作系統或存儲上的數據文件的集合。mysql數據庫中,數據庫文件可以是* .frm、*.MYD、*.MYI、*.ibd等結尾的文件,不同存儲引擎文件類型不同。
1、 .frm文件
不論是什麽存儲引擎,每一個表都會有一個以表名命名的.frm文件,與表相關的元數據(meta)信息都存放在此文件中,包括表結構的定義信息等。
2、.MYD文件
myisam存儲引擎專用,存放myisam表的數據(data)。每一個myisam表都會有一個.MYD文件與之呼應,同樣存放在所屬數據庫的目錄下
3、.MYI文件
也是myisam存儲引擎專用,存放myisam表的索引相關信息。對於myisam存儲引擎來說,可以被緩存(cache)的內容主要就是來源於.MYI文件中。
每一個myisam表對應一個.MYI文件,其存放的位置和.frm及.MYD一樣
4、.ibd文件和ibdata文件
存放innoDB的數據文件(包括索引)。innoDB存儲引擎有兩種表空間方式:獨享表空間和共享表空間。
獨享表空間:使用.ibd文件來存放數據,且每個表一個.ibd文件,文件存放在和myisam數據相同的位置。
共享表空間:使用.ibdata文件,所有表共同使用一個(或多個,自行配置)ibdata文件。
5、db.opt文件
此文件在每一個自建的庫裏都會有,記錄這個庫的默認使用的字符集和校驗規則。
其他文件:
1)系統配置文件【my.cnf】
此文件中可以包含多種參數選項組,每一種參數組都通過中括號給了固定的組名,如:
[mysqld]組中包括了mysqld服務啟動時的初始化參數
[client]組中包含著客戶端工具程序可以讀取的參數,此外還有其他針對各個客戶端軟件的特定參數組等
2).pid文件
pid文件是mysqld應用程序在Unix/Linux環境下的一個進程文件,和許多其他Unix/Linux服務端程序一樣,它存放著自己的進程id
3).socket文件
socket文件也是在Unix/Linux環境下才有的,用戶在Unix/Linux環境下客戶端連接可以不通過TCP/IP網絡而直接使用Unix Socket來連接mysql.
數據庫實例(instance):
由後臺進程或者線程以及一個共享內存區組成。共享內存可以被運行的後臺線程所共享。需要註意:數據庫實例才是真正操作數據庫的。
數據庫和數據庫實例的關系:
通常情況下,數據庫實例和數據庫是一一對應的關系,也就是一個數據庫實例對應一個數據庫;但是,在集群環境中存在多個數據庫實例共同使用一個數據庫。
oracle RAC 多個實例對應一個數據
數據庫服務器(database server):部署安裝數據庫實例的服務器。
總結:數據庫服務器(數據庫軟件)——>啟動數據庫(進程|線程)——>數據庫實例——>數據庫文件(讀寫)
mysql 體系結構