新聞中心
MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),采用的是分層結(jié)構(gòu),本文中將簡(jiǎn)單介紹MySQL數(shù)據(jù)庫(kù)的內(nèi)部架構(gòu)。

創(chuàng)新互聯(lián)建站2013年至今,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元那曲做網(wǎng)站,已為上家服務(wù),為那曲各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575
MySQL是一個(gè)C/S系統(tǒng),MySQL服務(wù)器是服務(wù)器,連接到MySQL服務(wù)器的應(yīng)用程序是客戶端。MySQL體系結(jié)構(gòu)主要包含三層:
- 客戶端層
- 服務(wù)器層
- 存儲(chǔ)層
客戶端層
客戶端層主要負(fù)責(zé)連接數(shù)據(jù)庫(kù),連接建立后,客戶端可以看到一個(gè)線程??蛻舳藢酉蚍?wù)端發(fā)送請(qǐng)求指令,并在屏幕上顯示輸出。
比如連接MySQL服務(wù)器:mysql -u root -p
查詢端口號(hào)3306:
$ netstat -ano | findstr 3306
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 18456
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 18456
TCP [::]:3306 [::]:0 LISTENING 18456
TCP [::]:33060 [::]:0 LISTENING 18456
TCP [::1]:3306 [::1]:64636 ESTABLISHED 18456
TCP [::1]:64636 [::1]:3306 ESTABLISHED 148
$ tasklist | findstr 18456
mysqld.exe 18456 Services 0 374,900 K
$ tasklist | findstr 148
mysql.exe 148 Console 1 10,840 K
可以看到啟動(dòng)了一個(gè)PID為148,名字為mysql.exe的進(jìn)程。
另外開(kāi)啟一個(gè)連接會(huì)再啟動(dòng)一個(gè)mysql進(jìn)程:
$ netstat -ano | findstr 3306
TCP [::1]:3306 [::1]:64636 ESTABLISHED 18456
TCP [::1]:3306 [::1]:64909 ESTABLISHED 18456
TCP [::1]:64636 [::1]:3306 ESTABLISHED 148
TCP [::1]:64909 [::1]:3306 ESTABLISHED 1272
服務(wù)器層
MySQL Server 層負(fù)責(zé)MySQL的所有邏輯功能,包括連接器、數(shù)據(jù)緩存、緩存查詢、分析器、優(yōu)化器、執(zhí)行器等核心功能,以及所有的內(nèi)置函數(shù)(如日期、時(shí)間、數(shù)學(xué)和加密函數(shù)等),所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程、觸發(fā)器、視圖等。
連接器
客戶端連接服務(wù)器時(shí)會(huì)首先經(jīng)過(guò)連接器,連接器負(fù)責(zé)跟客戶端建立連接、維持和管理連接、認(rèn)證、權(quán)限管理等。
執(zhí)行連接命令 mysql -u root -p,輸入密碼,密碼認(rèn)證通過(guò),然后進(jìn)行權(quán)限認(rèn)證,這樣用戶與MySQL服務(wù)器就成功的建立了連接。
可以使用 show processlist 命令中獲取建立的連接:
mysql> show processlist;
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 6007 | Waiting on empty queue | NULL |
| 11 | root | localhost:64636 | NULL | Query | 0 | starting | show processlist |
| 12 | root | localhost:64909 | NULL | Sleep | 5182 | | NULL |
+----+-----------------+-----------------+------+---------+------+------------------------+------------------+
3 rows in set (0.00 sec)
連接建立成功后,如果不進(jìn)行進(jìn)一步操作,不會(huì)馬上斷開(kāi),此連接進(jìn)入空閑狀態(tài),Sleep 表示一個(gè)空閑連接。這個(gè)空閑連接也不會(huì)一直存在,一般默認(rèn)是 8 小時(shí),可以通過(guò)設(shè)置參數(shù) wait_timeout 來(lái)控制。
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set, 1 warning (0.05 sec)
mysql> set global wait_timeout=28800;
查詢緩存
執(zhí)行查詢語(yǔ)句前,MySQL會(huì)先查找查詢緩存,如果當(dāng)前查詢存在緩存(語(yǔ)句及結(jié)果會(huì)以 key-value 對(duì)的形式保存)中,那么結(jié)果就會(huì)直接返回到客戶端。
如果語(yǔ)句不在查詢緩存中,就會(huì)繼續(xù)后面的執(zhí)行階段。執(zhí)行完成后,執(zhí)行結(jié)果會(huì)被存入查詢緩存中。
需要注意的是,對(duì)于頻繁更新的數(shù)據(jù)表不建議開(kāi)啟查詢緩存。只要有對(duì)一個(gè)表的更新,這個(gè)表上所有的查詢緩存都會(huì)被清空,這對(duì)于并發(fā)度大的服務(wù)來(lái)說(shuō)會(huì)導(dǎo)致額外的開(kāi)銷(xiāo),反而降低效率 。
MySQL 8.0 版本已經(jīng)將查詢緩存功能刪除了。
mysql> show variables like '%query_cache%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| have_query_cache | NO |
+------------------+-------+
1 row in set, 1 warning (0.00 sec)
分析器
?分析器是對(duì) SQL 語(yǔ)句進(jìn)行解析,首先做“詞法分析”,識(shí)別出SQL 語(yǔ)句的字符串分別是什么,代表什么。比如查詢語(yǔ)句 select * from student where id=1;,識(shí)別出關(guān)鍵字select表示一個(gè)查詢語(yǔ)句,名為student的表,把字符串“id”識(shí)別成表字段id。如果不存在id字段,則會(huì)在這個(gè)階段報(bào)錯(cuò)。
完成詞法分析后,開(kāi)始進(jìn)行“語(yǔ)法分析”,根據(jù)語(yǔ)法規(guī)則,判斷輸入的 SQL 語(yǔ)句是否滿足 MySQL 語(yǔ)法。?
優(yōu)化器
經(jīng)過(guò)分析器后,還要使用優(yōu)化器進(jìn)行優(yōu)化。包括了多種優(yōu)化技術(shù),比如確定掃描表的順序、選擇索引、確定表連接順序等。
執(zhí)行器
SQL語(yǔ)句經(jīng)過(guò)了詞法分析、語(yǔ)法分析和優(yōu)化之后,正式進(jìn)入執(zhí)行器階段,開(kāi)始執(zhí)行語(yǔ)句。
執(zhí)行之前,還會(huì)進(jìn)行權(quán)限驗(yàn)證,查詢是否有相應(yīng)權(quán)限。如果有權(quán)限,執(zhí)行器會(huì)調(diào)用表的引擎提供的接口執(zhí)行語(yǔ)句,執(zhí)行器會(huì)將所有滿足條件的行組成的記錄集作為結(jié)果集返回給客戶端。
存儲(chǔ)層
存儲(chǔ)引擎層負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取。其架構(gòu)模式是插件式的,支持 InnoDB、MyISAM、Memory 等多個(gè)存儲(chǔ)引擎,不同的存儲(chǔ)引擎共用一個(gè) Server 層。
使用命令 show engines; 查看當(dāng)前MySQL服務(wù)器支持的引擎:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
默認(rèn)存儲(chǔ)引擎為InnoDB,可以在建表的時(shí)候指定存儲(chǔ)引擎:
create table student(
id int not null auto_increment primary key COMMENT 'ID',
name varchar(10) not null COMMENT '姓名',
sex char(10) not null COMMENT '性別',
age tinyint(100) not null COMMENT '年齡',
dept char(4) not null COMMENT '專(zhuān)業(yè)') ENGINE=InnoDB
DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
comment = '學(xué)生';
在MySQL 5.5.5 之前的版本默認(rèn)使用MyISAM 存儲(chǔ)引擎,MySQL 5.5.5 版本開(kāi)始使用InnoDB作為默認(rèn)存儲(chǔ)引擎。
分享題目:MySQL基礎(chǔ)架構(gòu):SQL查詢語(yǔ)句執(zhí)行過(guò)程
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dhhhhge.html


咨詢
建站咨詢
