1.1. mysql邏輯架構
心裡記著一張mysql元件關係圖對於理解mysql伺服器有很大幫助。圖1-1展示了一張mysql架構的邏輯檢視。最上面一層包含的服務不是mysql所獨有的。它是多數基於網路的客戶端/伺服器工具或者服務所需要的:連線處理、鑑權、安全等等。
圖1-1 mysql邏輯架構圖
從第二層開始,事情才變得有趣起來。mysql的重要元件都在這部分,包括查詢的解析、分析、優化、快取以及其他所有的內建函式(如日期函式,時間函式,數學函式以及加密函式等)。另外所有儲存引擎所共有的功能也都在這一層,比如儲存過程、觸發器、檢視等。
第三層包括了儲存引擎。儲存引擎負責在mysql中儲存和獲取資料。如同gnu/linux的眾多檔案系統一樣,這些儲存引擎同樣有著自己的優勢與缺點。伺服器通過儲存引擎api來與儲存引擎進行互動。這個介面隱藏了各個儲存引擎之間實現上的差異,並且很大程度上使得儲存引擎與查詢層分開。這個api包括了許許多多的底層函式來執行諸如「開始乙個事務」或者「獲取包括這個主鍵的行」等操作。儲存引擎不解析sql(有乙個例外是innodb儲存引擎中解析外來鍵定義時還需要解析sql,因為mysql在查詢層沒有對外鍵進行實現。),也不和其他儲存引擎進行直接互動,它們只是簡單的響應伺服器的請求。
1.1.1. 連線管理與安全
在伺服器程序內每個客戶端連線會得到乙個單獨的執行緒。這個連線的所有查詢都在那個執行緒內執行,而這些執行緒輪流地駐留在cpu或者其中乙個核上(多核情況)。伺服器會快取建立的執行緒,因此不需要為每個新的連線都建立或者銷毀執行緒。(mysql ab計畫在未來的伺服器版本中將連線與執行緒分開)
當客戶端應用連線到伺服器時,伺服器需要對它進行鑑權。鑑權是基於使用者名稱、客戶端位址以及密碼的。x.509的證書也可以用在基於安全套接字層(ssl)的連線之上。當乙個客戶端連線到伺服器後,伺服器會驗證客戶端是否有許可權執行它所發出的每個查詢,(比如檢查使用者是否有許可權在world資料庫上的country表上執行乙個select語句。)在第十二章,我們將會詳細介紹這部分的內容。
1.1.2. 優化與執行
mysql通過解析請求來生成乙個內部結構體(解析樹),然後在此基礎上應用一系列的優化策略。這些策略可能包括重寫請求,確認讀取表的順序,決定用哪些索引等等。你也可以在查詢語句中新增一些特殊的關鍵字來影響優化器的優化策略選擇。你也可以要求伺服器來解釋優化的各個方面。這可以使得你知道伺服器在優化時所做的決定,以此為參考可以修改查詢語句,資料庫表定義以及設定等,以使資料庫盡可能高效的執行。我們將在第四章詳細介紹優化器的知識。
優化器實際上可以不關心儲存引擎具體使用哪乙個資料庫表,但是儲存引擎卻可以對伺服器如優化查詢產生影響。優化器會向儲存引擎詢問它的一些能力,特定操作的代價以及表資料的統計資訊。比如有些儲存引擎所支援的索引型別對於特定的查詢很有幫助。我們將會在第三章詳細介紹索引以及資料庫模式的優化。
在解析查詢之前,伺服器會先詢問查詢快取,查詢快取中只儲存select語句以及它對應的結果。如果有人發出了一條和查詢快取中已經存在的select語句一樣的查詢請求,那麼伺服器就不必解析、優化甚至執行-它只是簡單地將已經存在的結果集返回。我們將會在「mysql查詢快取」一節中詳細對此進行描述。
11 mysql匯出資料
1 txt格式 select from runoob.tb1 into outfile tmp runoob.txt 2 csv格式 select from passwd into outfile tmp runoob.txt fields terminated by enclosed by lin...
11 Mysql注入讀寫檔案
less 1 先在c盤新建乙個名為123的txt檔案 然後訪問 union select 1,load file c 123.txt 3 less 7 自動寫入乙個內容為 的檔案 union select 1,3 into outfile c phpstudy phptutorial www sql...
mysql匯出資料意義 11 mysql匯出資料
1 使用select.into outfile語句匯出資料 1 txt格式 select from runoob.tb1 into outfile tmp runoob.txt 2 csv格式 select from passwd into outfile tmp runoob.txt fields...