一.客戶端與伺服器模型 1.mysql是一個典型的C/S服務結構 1.1 mysql自帶的客戶端程式(/application/mysql/bin) mysql mysqladmin mysqldump 1.2 mysqld一個二進位程式,後臺的守護進程 單進程 多線程 2.應用程連接M ...
一.客戶端與伺服器模型
- 1.mysql是一個典型的C/S服務結構
- 1.1 mysql自帶的客戶端程式(/application/mysql/bin)
- mysql
- mysqladmin
- mysqldump
- 1.1 mysql自帶的客戶端程式(/application/mysql/bin)
- 1.2 mysqld一個二進位程式,後臺的守護進程
- 單進程
- 多線程
2.應用程連接MySQL方式
- TCP/IP的連接方式
- 套接字連接方式
總結:
- 不一定-h都是TCP連接,-hlocalhost(socket)
- 不一定-S都是socket連接,如果前面加了-h一定是tcp
- MYSQL預設使用的事socket(安全,速度快)
二.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;
連接層
- 1、提供連接協議(socket、tcp/ip)
- 2、驗證用戶的合法性(用戶名、密碼、白名單)
- 3、提供一個專用連接線程(接收SQL、返回結果),將SQL語句交給SQL層繼續處理
- 許可權確定
SQL層
- 1、接收到SQL語句,語法判斷。
- 2、判斷語義(判斷語句類型:DML、DDL、DCL、DQL)
- 3、解析SQL語句,生成多種執行計劃
- 4、優化器,選擇他認為成本最低的執行計劃。
- 5、執行器根據優化器的選擇,按照優化器建議執行SQL語句,得到去哪兒找SQL語句需要訪問的數據
- 5.1 具體:在哪個數據文件上的哪個數據頁中?
- 5.2 將以上結果充送給下層繼續處理
- 6、接收存儲引擎層的數據,結構化成表的形式,通過連接層提供的專用線程,將表數據返回給用戶。
- 7、提供查詢緩存
- 7.1 query_cache, 使用memcache 或者redis 替代
- 8、日誌記錄(binlog)
存儲引擎層
- 1、接收上層的執行結果
- 2、取出磁碟文件和相應數據,結構化成表格,返回給SQL層
- 3、提供一個與SQL層交互的線程
三.MySQL的結構
MySQL的邏輯結構(熟悉)
MySQL的邏輯對象:做為管理人員或者開發人員操作的對象
- 1、庫
- 2、表:元數據+真實數據行
- 3、元數據:用來描述真實數據的數據,列+其它屬性(行數+占用空間大小+許可權)
- 4、列:列名字+數據類型+其他約束(非空、唯一、主鍵、非負數、自增長、預設值)
最直觀的數據:二維表,必須用庫來存放
MySQL邏輯結構與Linux系統對比
MySQL | Linux |
---|---|
庫 | 目錄 |
show databases; | ls-l / |
use mysql | cd /mysql |
表 | 文件 |
show tables; | ls |
二維表=元數據+真實數據行 | 文件=文件名+文件屬性 |
create user zls@'%';select user,host from mysql.user; | useradd |
MySQL的物理結構(瞭解)
1)MySQL的最底層的物理結構是數據文件,也就是說,存儲引擎層,打交道的文件,是數據文件。
2)存儲引擎分為很多種類(Linux中的FS)
3)不同存儲引擎的區別:存儲方式、安全性、性能
myisam:

innodb:

段、區、頁(塊)
- 1、段:理論上一個表就是一個段,由多個區構成,(分區表是一個分區一個段)
- 2、區:連續的多個頁構成 一個區等於64個頁
- 3、頁:最小的數據存儲單元,預設是16k
==分區表==:分區表就是一個區構成一個段也就是一個表,就是分區表,64個頁