MySQL入門--體系結構

panpong發表於2019-06-25

1.       MySQL 體系結構

1.1.         MySQL 體系結構

MySQL Client/Server 模型

MySQL 安裝具有以下必需的體系結構元件: MySQL Server Client 程式以及 MySQL Client 程式。中央程式充當 Server Client 程式連線到該 Server 以發出資料請求。 MySQL Client/Server 通訊並不僅限於所有計算機都執行同一作業系統的環境。

l   Client 程式可以連線到在相同主機或不同主機上執行的 Server

l   Client/Server 通訊可以發生在計算機執行不同作業系統的環境中。

 

1.2.         MySQL Client 程式

Client 程式可以連線到 MySQL Server ,並檢索、修改、新增或刪除資料。常用的 Client 程式如下:

mysql :發出查詢以及檢視結果。

mysqladmin :管理 Server

mysqlcheck :檢查資料庫表的完整性。

mysqldump 建立邏輯備份。

mysqlimport :匯入文字資料檔案。

mysqlshow :顯示資料庫、表和列資訊。

mysqlslap :模仿 Client 負載。

這些程式通過命令直譯器的提示符執行:

shell> mysql [options]

mysql Client 程式通常稱為命令列介面 (command-line interface, CLI)

另外, MySQL Workbench 是一款 GUI 工具,使用該工具可進行資料庫管理,例如,為資料庫建模、執行資料庫查詢、執行管理任務

 

1.3.         MySQL 管理程式和實用程式

MySQL 管理程式和實用程式可以直接訪問資料檔案,而無需使用 Client 連線到 Server 。常用非 Client 程式如下:

Ø   innochecksum offline 檢查 InnoDB 表空間檔案。

Ø   mysqlaccess :檢查主機名、使用者名稱和資料庫組合的訪問許可權的指令碼

Ø   mysqldumpslow :讀取和彙總慢速查詢日誌內容的實用程式。

Ø   mysqlbinlog :顯示二進位制日誌檔案。用於從二進位制日誌中讀取語句的實用程式。

Ø   myisam_ftdump :在 MyISAM 表中顯示全文索引資訊的實用程式。

Ø   myisamchk :用於描述、檢查、優化和修復 MyISAM 表的實用程式。

Ø   myisamlog :處理 MyISAM 日誌檔案內容的實用程式。

Ø   myisampack :壓縮 MyISAM 表以生成更小的只讀表的實用程式。

Ø   mysql_config_editor :使您能夠將身份驗證憑據儲存在名為 .mylogin.cnf 的安全加密登入路徑檔案中。

Ø   mysqlhotcopy : 在伺服器執行時快速備份 MyISAM 表的實用程式。 5.7 後廢棄

Ø   mysql_convert_table_format : 將資料庫中的錶轉換為使用給定儲存引擎的實用程式。

Ø   mysql_find_rows : 讀取包含 SQL 語句的檔案 ( 如更新日誌 ) 並提取與給定正規表示式匹配的語句的實用程式。

Ø   mysql_fix_extensions : MyISAM 表檔案的副檔名轉換為小寫的實用程式。在將檔案從具有大小寫不敏感檔名的系統傳輸到具有大小寫敏感檔名的系統之後,這將非常有用。

Ø   mysql_setpermission :用於互動式地設定 MySQL 授予表中的許可權的實用程式。

Ø   mysql_waitpid :使用給定程式 ID 殺程式的實用程式。

Ø   mysql_zap :使用模式匹配的方式殺程式的實用程式。

以上某些應用程式在執行之前必須滿足:關閉 Server 或者備份當前表的條件,建議在執行這些程式前檢視相關要求。

 

1.4.         MySQL Server

MySQL Server 是一個名為 mysqld 的資料庫程式,它與“ host ”不相同 , 是一個單一程式,且為多執行緒 , 可以管理磁碟和記憶體中資料庫的訪問,支援併發 Client 連線,支援多種儲存引擎,支援事務表和非事務表。

Server Host 之間的差別:

l   Server :一個軟體程式 (mysqld) ,具有版本號和一系列功能

l   Host Server 程式在其上執行的物理計算機,其中包含硬體配置、作業系統、網路地址 , 多個 mysqld 例項可同時在一臺主機上執行。

mysqld Server 程式)程式可以劃分為以下三個層:

l   連線層:處理連線。此層存在於所有 Server 軟體( Web/ 郵件 /LDAP Server )上。

l   SQL 層:處理所連線的應用程式傳送的 SQL 查詢。

l   儲存層:處理資料儲存。資料可以按不同格式和結構儲存在不同物理介質上。

1.4.1          連線層

連線層可通過多種通訊協議接受來自應用程式的連線:

²   TCP/IP

²   UNIX 套接字

²   共享記憶體

²   命名管道

TCP/IP 適用於整個網路。 Client Server 在同一臺計算機上執行時,上面列出的其他協議僅支援本地連線。此層針對每個連線維護一個執行緒。此執行緒處理查詢執行。在某個連線可以開始傳送 SQL 查詢之前,將會通過驗證使用者名稱 + 口令 + Client 主機來對該連線進行驗證。

通訊協議在 Client 庫和驅動程式中實現 , 連線協議的速度隨本地設定不同而不同。

l   TCP/IP Transmission Control Protocol/InternetProtocol ):該通訊協議套件用於連線 Internet 上的主機。在 Linux 作業系統中, TCP/IP 是內建的,供 Internet 使用,從而使其成為通過網路傳輸資料的標準。這是適用於 Windows 的最佳連線型別。

l   UNIX 套接字 :一種程式間通訊形式,用於在同一臺計算機上的程式之間形成雙向通訊鏈路的一端。套接字需要本地系統上的物理檔案。這是適用於 Linux 的最佳連線型別。

l   共享記憶體 :一種在程式之間傳遞資料的有效方式。一個程式建立其他程式(如果允許)可以訪問的記憶體部分。此 Windows 顯式“被動”模式僅適用於單臺 (Windows) 計算機。預設情況下,共享記憶體處於禁用狀態。要啟用共享記憶體連線,必須使用 --shared-memory 選項啟動 Server

l   命名管道 :命名管道的使用偏向於 Client/Server 通訊,其工作方式與套接字非常相似。命名管道支援讀 / 寫操作,以及 Server 應用程式的顯式“被動”模式。此協議僅適用於單臺 (Windows) 計算機。預設情況下,命名管道處於禁用狀態。要啟用命名管道連線,必須使用 --enable-named-pipe 選項啟動 Server

 

1.4.2          SQL

建立連線後, MySQL Server 將處理以下程式:

l   授權和解析器 :解析器驗證語法是否正確,然後,授權驗證是否允許所連線的使用者執行特定查詢。

l   優化器 :建立每個查詢的執行計劃,這是有關如何以最優化的方式執行查詢的分步指令集。確定要使用哪些索引以及採用何種順序處理表是此步驟的最重要部分。

l   查詢執行 :完成每個查詢的執行計劃。

l   查詢快取記憶體 :(可選)可配置的查詢快取記憶體,可用於儲存(並立即返回)執行的查詢和結果。

l   查詢日誌記錄 :可以啟用以跟蹤執行的查詢。

 

SQL 語句處理流程圖如:  

 

1.4.3          儲存層

    通過 MySQL ,您可以使用稱為“儲存引擎”的不同型別的儲存。資料可以儲存在磁碟、記憶體和網路中。資料庫中的每個表可以使用任何可用的儲存引擎。“磁碟”儲存便宜且持久,而“記憶體”儲存則要快得多。

InnoDB 是預設儲存引擎。它可提供事務、全文索引和外來鍵約束,因此適用於各種混合查詢。它具有多種用途,支援讀密集型工作負荷、讀 / 寫工作負荷和事務工作負荷。其他儲存引擎包括:

MyISAM :適用於頻繁讀取但很少更新的資料

MEMORY :在記憶體中儲存所有資料

NDB :供 MySQL Cluster 用來為高可用性資料提供冗餘的可伸縮拓撲

注:儲存引擎可擴充套件,超越儲存層,而不只包含儲存。它們還包括其他結構和實現機制。

 

1)   儲存引擎:概覽

儲存引擎是充當不同表型別的處理程式的 Server 元件。儲存引擎用於儲存資料、檢索資料、通過索引查詢資料;

Client 通過以 SQL 語句形式向 Server 傳送請求從表中檢索資料或更改表中的資料。伺服器通過使用雙層處理(上層包括 SQL 解析器和優化器、下層包含一組儲存引擎)模型執行每條語句。

Client 通常不需要關心哪些引擎參與 SQL 語句處理。 Client 可以使用相同的語句(不管哪個引擎管理它們)訪問和處理表。這種獨立於引擎的 SQL 語句的一些例外情況包括:

l   CREATE TABLE 具有 ENGINE 選項,可基於每個表指定要使用的引擎。

l   ALTER TABLE 具有 ENGINE 選項,允許將錶轉換為使用不同的儲存引擎。

l   某些索引型別僅適用於特定儲存引擎。例如,僅 InnoDB MyISAM 引擎支援全文索引。

l   COMMIT ROLLBACK 操作僅影響事務儲存引擎(例如 InnoDB NDB )管理的表。

 

2)   依賴於儲存引擎的功能

以下屬性依賴於儲存引擎:

l   儲存介質:表儲存引擎可以在磁碟上、在記憶體中或通過網路儲存資料。

l   事務功能:某些儲存引擎支援全面的 ACID 事務功能,而其他儲存引擎可能不具有事務支援。注:“事務與 Lock ”一課中討論了 ACID

l   Lock :儲存引擎可能使用不同的 Lock 粒度(例如表級別 Lock 或行級別 Lock )和機制來提供與併發事務的一致性。

l   備份和恢復:可能會受到儲存引擎儲存和運算元據的方式的影響。

l   優化:不同的索引實現可能會影響優化。儲存引擎以不同的方式使用內部快取記憶體、緩衝區和記憶體以優化效能。

l   特殊功能:某些引擎型別具有提供全文搜尋和引用完整性的功能以及處理空間資料的能力。

優化器可能需要根據儲存引擎進行不同的選擇,但這均是通過每種儲存引擎支援的標準化介面 (API) 進行處理的。

 

3)   MySQL 如何使用磁碟空間

    

    程式檔案隨資料目錄一起儲存在 Server 安裝目錄下。執行各種 Client 程式、管理程式和實用程式時將建立程式可執行檔案和日誌檔案。首要使用磁碟空間的是資料目錄。

l   Server 日誌檔案和狀態檔案包含有關 Server 處理的語句的資訊。日誌可用於進行故障排除、監視、複製和恢復。

l   InnoDB 日誌檔案(適用於所有資料庫)駐留在資料目錄級別。

l   InnoDB 系統表空間包含資料字典、撤消日誌和緩衝區。

l   每個資料庫在資料目錄下均具有單一目錄(無論在資料庫中建立何種型別的表)。資料庫目錄儲存以下內容:

-     資料檔案:特定於儲存引擎的資料檔案。這些檔案也可能包含後設資料或索引資訊,具體取決於所使用的儲存引擎。

-     格式檔案 (.frm) :包含每個表和 / 或檢視結構的說明,位於相應的資料庫目錄中。

-     觸發器:與某個表關聯並在該表發生特定事件時啟用的命名資料庫物件。

l   資料目錄的位置取決於配置、作業系統、安裝包和分發。典型位置是 /var/lib/mysql

l   MySQL 在磁碟上儲存系統資料庫 (mysql) mysql 包含諸如使用者、許可權、外掛、幫助列表、事件、時區實現和儲存例程之類的資訊。

 

1.5.         MySQL 如何使用記憶體

記憶體分配可以劃分為以下兩種類別:

全域性 (每例項記憶體): Server 啟動時分配一次並在 Server 關閉時釋放。此記憶體在所有會話間共享。當所有實體記憶體用盡時,作業系統開始交換。這會對 MySQL Server 效能具有不利影響,可能會導致 Server 崩潰。

會話 (每會話記憶體):基於每個會話(有時稱為“執行緒”)動態進行分配。此記憶體可在會話結束時或不再需要會話時釋放。此記憶體多用於處理查詢結果。所使用的緩衝區大小基於每個連線。例如, read_buffer 10 MB 且具有 100 個連線意味著可能總共有 100*10 MB 同時用於所有讀取緩衝區。

Server 以三種不同的類別分配記憶體:

Server 在執行時會為許多種類的資料分配記憶體。

執行緒快取記憶體 :在 MySQL (和其他程式)中使用執行緒將應用程式執行劃分為兩個或更多個同時執行的任務。將會為連線到 MySQL Server 的每個 Client 建立單獨的執行緒以處理該連線。

緩衝區和快取記憶體 :緩衝區和快取記憶體提供資料管理子系統並支援快速訪問專案,例如授權表緩衝區、儲存引擎緩衝區(如 InnoDB 的日誌緩衝區)和儲存開放表說明符的表開放緩衝區。查詢快取記憶體還用於加速處理重複發出的查詢。

如果使用 MEMORY 儲存引擎, MySQL 將使用主記憶體作為主體資料儲存。其他儲存引擎也可能使用主記憶體進行資料儲存,但 MEMORY 是唯一的,未設計為在磁碟上儲存資料。

連線 / 會話

內部臨時表 :在某些查詢執行情況下, MySQL 會建立一個臨時表來解析查詢。可以在記憶體中或在磁碟上建立臨時表,具體取決於其大小或內容或者查詢語法。

特定於 Client 的緩衝區 :專門設計為支援所連線的各個 Client 。緩衝區示例包括:

-     用於交換資訊的通訊緩衝區

-     表讀取緩衝區(包括支援聯接的緩衝區)

-     排序操作

 

1.6.         MySQL 外掛介面

外掛介面需要 mysql 資料庫中的 PLUGINS 表。此表是在 MySQL 安裝過程中建立的。 MySQL 既支援 Client 外掛也支援 Server 外掛。守護程式外掛啟動在 Server 內執行的後臺程式(例如,定期執行心跳處理)。

使用外掛 API 可以裝入和解除安裝 Server 元件:

  支援動態裝入,無需重新啟動 Server

  支援全文解析器;可用於替換或擴充內建全文解析器的全文解析器外掛。例如,某個外掛可以使用不同於內建解析器所使用的規則將文字解析為字。要解析具有不同於內建解析器所預期的特徵的文字,這很有用。

  支援不同的驗證方法

  支援作為外掛安裝的儲存引擎;向 Server 提供低階別儲存、檢索和資料索引的儲存引擎

  支援 INFORMATION_SCHEMA 外掛;資訊模式外掛作為 INFORMATION_SCHEMA 資料庫中的表出現。


MySQL入門--體系結構

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2648691/,如需轉載,請註明出處,否則將追究法律責任。

相關文章