mysql執行流程:
mysql是一個單進程的服務,對於每一個請求都是用線程來響應的,這就需要一個連接器來處理新使用者的請求,響應,銷毀
1.用戶端請求,伺服器端(連接器)開闢線程響應使用者
2.使用者發起SQL語句查詢資料庫
3.查詢快取:記錄使用者的SQL查詢語句,如果重新查詢同樣內容,就返回緩衝
4.如果緩衝沒有進入分析器:(分析器也可能借簽緩衝)
文法分析器:使用者命令文法是否正確
詞法分析器:將使用者的命令進行切片,一個詞一個詞用空格隔開,獲得使用者要查詢的表,內容,使用者的許可權等
5.最佳化:執行路徑的選擇,產生執行樹
每個SQL語句都有很多執行路徑,最佳化的目的就是在這些執行路徑裡選擇一個最優的執行路徑
6.儲存引擎:用於管理儲存在檔案系統,甚至是裸裝置上的資料管理程式,它本身給上層應用提供不同的管理,有的支援事務,有的不支援事務。
#查詢快取可以大大加速這個過程,不過緩衝本身可能帶來劣勢,假如一個使用者要查詢一個資料,正好緩衝裡有,而在之前,這條資料剛剛被修改過那麼返回的緩衝結果就是過時的。
MYSQL的結構:
用戶端:mysql
連接器: NativeC API 本地C語言介面
JDBCJAVA的資料庫連接器
ODBC開放式資料庫互聯,非常底層 Oracle,SOLServer都支援
串連池(conetcionpool):它的後方是MYSQL的真正功能
SQL介面:使用者通過sql用戶端發過來的命令,由sql介面接收
DML資料操作語言:查詢,修改,升級資料等
DDL資料定義語言 (Data Definition Language):建立一個新的資料庫,新的索引,刪除一個使用者等
預存程序視圖觸發器
Parser:分析器
查詢 事務 對象許可權
optimizer:訪問路徑
產生執行樹
caches&buffers:緩衝和緩衝
最佳化裡最重要的是緩衝的最佳化
pluggablestroage engines儲存引擎(外掛程式式):將邏輯結構轉換為物理結構的程式
ManagementServices & Utilites工具:備份,恢複,安全,移植,叢集等,這些工具一般和檔案系統打交道,不需要和mysql-server打交道,它們對應的都是命令。
資料庫物件:(邏輯)
表,二維關係
索引
視圖
觸發器
預存程序
儲存函數
事件調讀器
遊標
使用者
物理
檔案
將資料庫物件和物理對象對應起來就是儲存引擎
Mysql
*外掛程式式的儲存引擎
mysql與mysql的串連方式:tcp,socket,pipe,memory
mysql的互動方式:interact batch
SQL
結構化查詢語言 (SQL)
bash
select,update,create,drop
Mysql安裝
版本選擇:
GA
RC
beta
alpha
在以後的使用過程中,RPM包很方便,但是會帶來各種問題,所以盡量使用編譯安裝甚至是LFS
Mysql-client
Mysql-devel:編譯安裝軟體包,需要用到Mysql的時候才安裝這個軟體包
Mysql-embedded: mysq嵌入式
Mysql-ndb-management
Mysql-server
Mysql-shared:可能被用戶端或者伺服器端的某些工具用到
Mysql-shared-compat
Mysql-test:測試Mysql,提供測試組件
一般來講,完全的MYSQL只需要安裝clientdevel share server
安裝目錄的作用
bin
data預設情況下將資料和索引存放的目錄
inclued
lib
man
mysql-test
scripts安裝時的初始化指令碼
share某種特定語言的錯誤資訊的,資訊原始檔案存放
sql-bench壓力測試工具
support-file提供一些初始化的檔案和指令碼