第二章· MySQL體系結構管理mysql
一.客戶端與服務器模型redis
sql
1.mysql是一個典型的C/S服務結構緩存
1.1 mysql自帶的客戶端程序(/application/mysql/bin)安全
mysql服務器
mysqladmin多線程
mysqldumpapp
1.2 mysqld一個二進制程序,後臺的守護進程socket
單進程tcp
多線程
2.應用程鏈接MySQL方式
TCP/IP的鏈接方式

套接字鏈接方式

思考:mysql -uroot -poldboy123是使用了哪一個鏈接方式???
二.MySQL服務器構成
什麼是實例
1.MySQL的後臺進程+線程+預分配的內存結構。
2.MySQL在啓動的過程當中會啓動後臺守護進程,並生成工做線程,預分配內存結構供MySQL處理數據使用。

圖1.1-word的打開方式

圖1.2-mysqld的打開方式
MySQLD服務器程序構成

mysqld是一個守護進程可是自己不能自主啓動:
[root@db01 ~]# mysql -uroot -poldboy123 [root@db01 ~]# select user,host,password from mysql.user;
鏈接層
一、提供鏈接協議(socket、tcp/ip)
二、驗證用戶的合法性(用戶名、密碼、白名單)
三、提供一個專用鏈接線程(接收SQL、返回結果),將SQL語句交給SQL層繼續處理

SQL層
一、接收到SQL語句,語法判斷。
二、判斷語義(判斷語句類型:DML、DDL、DCL、DQL)
三、解析SQL語句,生成多種執行計劃
四、優化器,選擇他認爲成本最低的執行計劃。
五、執行器根據優化器的選擇,按照優化器建議執行SQL語句,獲得去哪兒找SQL語句須要訪問的數據
5.1 具體:在哪一個數據文件上的哪一個數據頁中?
5.2 將以上結果充送給下層繼續處理
六、接收存儲引擎層的數據,結構化成表的形式,經過鏈接層提供的專用線程,將表數據返回給用戶。
七、提供查詢緩存
7.1 query_cache, 使用memcache 或者redis 替代
八、日誌記錄(binlog)
存儲引擎層
一、接收上層的執行結果
二、取出磁盤文件和相應數據
三、返回給SQL層,結構化以後生成表格,由專用線程返回給客戶端
三.MySQL的結構
MySQL的邏輯結構(熟悉)
MySQL的邏輯對象:作爲管理人員或者開發人員操做的對象
一、庫
二、表:元數據+真實數據行
三、元數據:列+其它屬性(行數+佔用空間大小+權限)
四、列:列名字+數據類型+其餘約束(非空、惟1、主鍵、非負數、自增加、默認值)
最直觀的數據:二維表,必須用庫來存放

MySQL邏輯結構與Linux系統對比
MySQL | Linux |
---|---|
庫 | 目錄 |
show databases; | ls-l / |
use mysql | cd /mysql |
表 | 文件 |
show tables; | ls |
二維表=元數據+真實數據行 | 文件=文件名+文件屬性 |
MySQL的物理結構(瞭解)
1)MySQL的最底層的物理結構是數據文件,也就是說,存儲引擎層,打交道的文件,是數據文件。
2)存儲引擎分爲不少種類(Linux中的FS)
3)不一樣存儲引擎的區別:存儲方式、安全性、性能
myisam:

innodb:

段、區、頁(塊)
一、段:理論上一個表就是一個段,由多個區構成,(分區表是一個分區一個段)
二、區:連續的多個頁構成
三、頁:最小的數據存儲單元,默認是16k