目錄
mysql架構
首頁 資料庫 mysql教程 詳細介紹mysql理論與基礎知識

詳細介紹mysql理論與基礎知識

Jun 10, 2021 am 09:27 AM
mysql

本篇文章給大家詳細介紹mysql理論和基礎知識。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

詳細介紹mysql理論與基礎知識

mysql架構

一、網路連線層

客戶端連接器(Client Connectors):提供與MySQL伺服器建立的支援。目前幾乎支援所有主流的服務端程式設計技術,例如常見的Java、C、Python、.NET等,它們透過各自API技術與MySQL建立連線

二、服務層(MySQL Server)

服務層是MySQL Server的核心,主要包含系統管理與控制工具、連線池、SQL介面、解析器、查詢最佳化器和快取六個部分。

連接池(Connection Pool):負責儲存和管理客戶端與資料庫的連接,一個執行緒負責管理一個連接。

系統管理與控制工具(Management Services & Utilities):例如備份還原、安全管理、叢集管理等

SQL介面(SQL Interface):用於接受客戶端傳送的各種SQL命令,並且傳回使用者需要查詢的結果。例如DML、DDL、預存程序、視圖、觸發器等。

解析器(Parser):負責將請求的SQL解析產生一個"解析樹"。然後根據一些MySQL規則進一步 檢查解析樹是否合法。

查詢優化器(Optimizer):當「解析樹」通過解析器語法檢查後,將交由優化器將其轉換成執行計 劃,然後與儲存引擎互動。

select uid,name from user where gender=1;

選取–》投影–》連接策略

1)select先根據where語句進行選取,並不是查詢出全部資料再過濾

2)select查詢根據uid和name進行屬性投影,並不是取出所有欄位

3)將前面選取和投影聯接上最終產生查詢結果

快取(Cache&Buffer): 快取機制是由一系列小型快取組成的。例如表格緩存,記錄緩存,權限緩 存,引擎緩存等。如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。

三、儲存引擎層(Pluggable Storage Engines)

#儲存引擎負責MySQL中資料的儲存與擷取,與底層系統檔案互動。 MySQL儲存引擎是插件式的, 伺服器中的查詢執行引擎透過介面與儲存引擎進行通信,介面屏蔽了不同儲存引擎之間的差異 。現在有 多種儲存引擎,各有各的特點,最常見的是MyISAM和InnoDB。

四、系統檔案層(File System) 

此層負責將資料庫的資料和日誌儲存在檔案系統之上,並完成與儲存引擎的交互,是檔案的實體儲存層。主要包含日誌文件,數據文件,配置文件,pid 文件,socket 文件等。

日誌檔

錯誤日誌(Error log)

#預設開啟,show variables like '%log_error%'

通用查詢日誌( General query log)

記錄一般查詢語句,show variables like '%general%';

二進位日誌(binary log)

記錄了對MySQL資料庫執行的更改操作,並且記錄了語句的發生時間、執行時長;但是它不會記錄select、show等不修改資料庫的SQL。主要用於資料庫復原和主從複製。

show variables like '%log_bin%'; //是否開啟

show variables like '%binlog%'; //參數檢視

##show binary logs;//查看日誌檔案慢

查詢日誌(Slow query log)

記錄所有執行時間逾時的查詢SQL,預設為10秒。

show variables like '%slow_query%'; //是否開啟

show variables like '%long_query_time%'; //時長

#設定檔

用於存放MySQL所有的設定資訊文件,例如my.cnf、my.ini等。

資料檔

db.opt 檔案:記錄這個函式庫的預設使用的字元集和校驗規則。

frm 檔案:儲存與表格相關的元資料(meta)訊息,包括表格結構的定義資訊等,每一張表都會 有一個frm 檔案。

MYD 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的資料(data),每一張表都會有一個 .MYD 檔案。

MYI 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的索引相關信息,每一張 MyISAM 表對 應一個 .MYI 檔案。

ibd檔案和 IBDATA 檔案:存放 InnoDB 的資料檔案(包括索引)。 InnoDB 儲存引擎有兩種 表空間方式:獨享表空間和共用表空間。獨享表空間使用 .ibd 檔案來存放數據,且每一張 InnoDB 表對應一個 .ibd 檔案。共享表空間使用 .ibdata 文件,所有表共同使用一個(或多 個,自行配置).ibdata 文件。

ibdata1 文件:系統表空間資料文件,儲存表元資料、Undo日誌等 。

ib_logfile0、ib_logfile1 檔案:Redo log 日誌檔。

pid 檔案

pid 檔案是 mysqld 應用程式在 Unix/Linux 環境下的一個進程文件,和許多其他 Unix/Linux 服務端程式一樣,它存放著自己的進程 id。

socket 檔案

socket 檔案也是在Unix/Linux 環境下才有的,使用者在Unix/Linux 環境下客戶端連線可以不透過TCP/IP 網路直接使用Unix Socket 來連接MySQL。

InnoDB和MyISAM

交易和外鍵

InnoDB支援交易和外鍵,具有安全性和完整性,適合大量insert或update操作 

MyISAM不支援交易和外鍵,它提供高速儲存和檢索,適合大量的select查詢操作

鎖定機制

#InnoDB支援行級鎖定,鎖定指定記錄。基於索引來加鎖實作。

MyISAM支援表級鎖,鎖定整張表。

索引結構

InnoDB使用聚集索引(叢集索引),索引和記錄在一起存儲,既快取索引,也快取記錄。

MyISAM使用非聚集索引(非叢集索引),索引和記錄分開。

並發處理能力

MyISAM使用表鎖,會導致寫入操作並發率低,讀取之間不會阻塞,讀寫阻塞。

InnoDB讀寫阻塞可以與隔離等級有關,可以採用多版本並發控制(MVCC)來支援高並發

儲存檔案

InnoDB表對應兩個文件,一個.frm表結構文件,一個.ibd資料檔。 InnoDB表最大支援64TB;

MyISAM表對應三個文件,一個.frm表結構文件,一個MYD表資料文件,一個.MYI索引文件。從 MySQL5.0開始預設限制是256TB。

Redo Log和Binlog區別

Redo Log是屬於InnoDB引擎功能,Binlog是屬於MySQL Server自帶功能,並且是以二進位 檔案記錄。

Redo Log屬於實體日誌,記錄此資料頁更新狀態內容,Binlog是邏輯日誌,記錄更新過程。

Redo Log日誌是循環寫,日誌空間大小是固定,Binlog是追加寫入,寫完一個寫下一個,不 會覆蓋使用。

Redo Log作為伺服器異常宕機後事務資料自動恢復使用,Binlog可以作為主從複製和資料。 Binlog沒有自動crash-safe能力。

在應用程式中可以在從庫追加多個索引來最佳化查詢,主庫這些索引可以不加,用於提升寫入效率。

讀寫分離方案

1寫後立刻讀取

在寫入資料庫後,某個時間段內讀操作就去主庫,之後讀取操作存取從庫。

2二次查詢

先去從庫讀取數據,找不到時就去主庫進行數據讀取。此操作容易將讀取壓力回饋給主庫,為了避免 惡意攻擊,建議對資料庫存取API操作進行封裝,有利於安全性和低耦合。

3根據業務特殊處理

根據業務特性和重要性進行調整,例如重要的,即時性要求高的業務資料讀寫可以放在主庫。對 於次要的業務,即時性要求不高可以進行讀寫分離,查詢時去從庫查詢。

相關推薦:《mysql教學

###

以上是詳細介紹mysql理論與基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

SQL刪除行後如何恢復數據 SQL刪除行後如何恢復數據 Apr 09, 2025 pm 12:21 PM

直接從數據庫中恢復被刪除的行通常是不可能的,除非有備份或事務回滾機制。關鍵點:事務回滾:在事務未提交前執行ROLLBACK可恢復數據。備份:定期備份數據庫可用於快速恢復數據。數據庫快照:可創建數據庫只讀副本,在數據誤刪後恢復數據。慎用DELETE語句:仔細檢查條件,避免誤刪數據。使用WHERE子句:明確指定要刪除的數據。使用測試環境:在執行DELETE操作前進行測試。

See all articles