MySQL體系結構mysql
鏈接者:不一樣語言的代碼程序和mysql的交互(SQL交互)
一、鏈接池 管理、緩衝用戶的鏈接,線程處理等須要緩存的需求
二、管理服務和工具組件 系統管理和控制工具,例如備份恢復、Mysql複製、集羣等
三、sql接口 接受用戶的SQL命令,而且返回用戶須要查詢的結果
四、查詢解析器 SQL命令傳遞到解析器的時候會被解析器驗證和解析(權限、語法結構)
五、查詢優化器 SQL語句在查詢以前會使用查詢優化器對查詢進行優化
select id,name from user where age = 40;
a、這個select 查詢先根據where 語句進行選取,而不是先將表所有查詢出來之後再進行age過濾
b、這個select查詢先根據id和name進行屬性投影,而不是將屬性所有取出之後再進行過濾
c、將這兩個查詢條件聯接起來生成最終查詢結果
六、緩存 若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據
七、插入式存儲引擎 存儲引擎說白了就是如何管理操做數據(存儲數據、如何更新、查詢數據等)的一種方法。由於在關係數據庫
中數據的存儲是以表的形式存儲的,因此存儲引擎也能夠稱爲表類型(即存儲和操做此表的類型)
說明:
在Oracle 和SQL Server等數據庫中,全部數據存儲管理機制都是同樣的。而MySql數據庫提供了多種存儲引擎。
用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。
甚至一個庫中不一樣的表使用不一樣的存儲引擎,這些都是容許的。sql
因爲該存儲引擎不支持事務、也不支持外鍵,因此訪問速度較快。所以當對事務完整性沒有要求並以訪問爲主的應用適合使用該存儲引擎。數據庫
mysql 5.5版本之後默認的存儲引擎
因爲該存儲引擎在事務上具備優點,即支持具備提交、回滾及崩潰恢復能力等事務特性,因此比MyISAM存儲引擎佔用更多的磁盤空間。所以當須要頻繁的更新、刪除操做,同時還對事務的完整性要求較高,須要實現併發控制,建議選擇。數組
MEMORY存儲引擎存儲數據的位置是內存,所以訪問速度最快,可是安全上沒有保障。適合於須要快速的訪問或臨時表。緩存
黑洞存儲引擎,寫入的任何數據都會消失,能夠應用於主備複製中的分發主庫。安全
物理文件包括:日誌文件,數據文件,配置文件,pid文件,socket文件等服務器
error log 錯誤日誌 排錯 /var/log/mysqld.log【默認開啓】
bin log 二進制日誌 備份 增量備份 DDL DML DCL
Relay log 中繼日誌 複製 接收 replication master
slow log 慢查詢日誌 調優 查詢時間超過指定值
log-error=/var/log/mysqld.log
log-bin=/var/log/mysql-bin/bin.log
server-id=2 5.7.x版本後
slow_query_log=1|0 slow_query_log_file=/var/log/mysql-slow/slow.log long_query_time=3
/etc/my.cnf—>/etc/mysql/my.cnf—>/usr/etc/my.cnf—> ~/.my.cnf
若是衝突,以最後一個讀取的爲準
[mysqld]組中包括了mysqld服務啓動時的初始化參數
[client]組中包含着客戶端工具程序能夠讀取的參數,此外還有其餘針對各個客戶端軟件的特定參數組等
1、.frm文件 不管是什麼存儲引擎,每個表都會有一個以表名命名的.frm文件,與表相關的元數據(meta)信息都存放在此文件中,包括表結構的定義信息等。 2、.MYD文件 myisam存儲引擎專用,存放myisam表的數據(data)。每個myisam表都會有一個.MYD文件與之呼應,一樣存放在所屬數據庫的目錄下 3、.MYI文件 也是myisam存儲引擎專用,存放myisam表的索引相關信息。對於myisam存儲引擎來講,能夠被緩存(cache)的內容主要就是來源於.MYI文件中。 每個myisam表對應一個.MYI文件,其存放的位置和.frm及.MYD同樣 4、.ibd文件和ibdata文件 存放innoDB的數據文件(包括索引)。innoDB存儲引擎有兩種表空間方式:獨享表空間和共享表空間。 獨享表空間:使用.ibd文件來存放數據,且每一個表一個.ibd文件,文件存放在和myisam數據相同的位置。 共享表空間:使用.ibdata文件,全部表共同使用一個(或多個,自行配置)ibdata文件。 ibdata1:系統表空間(數據文件)undo 段 ib_logfile0 redlog文件 一組 ib_logfile1 五、db.opt文件 此文件在每個自建的庫裏都會有,記錄這個庫的默認使用的字符集和校驗規。
pid文件是mysqld應用程序在Unix/Linux環境下的一個進程文件,和許多其餘Unix/Linux服務端程序同樣,它存放着本身的進程id
socket文件也是在Unix/Linux環境下才有的,用戶在Unix/Linux環境下客戶端鏈接能夠不經過TCP/IP網絡而直接使用Unix Socket來鏈接mysql.
數據庫(database): 操做系統或存儲上的數據文件的集合。mysql數據庫中,數據庫文件能夠是* .frm、*.MYD、*.MYI、*.ibd等結尾的文件, 不一樣存儲引擎文件類型不一樣。
由後臺進程或者線程以及一個共享內存區組成。共享內存能夠被運行的後臺線程所共享。
須要注意:數據庫實例纔是真正操做數據庫的。
數據庫和數據庫實例的關係:
一般狀況下,數據庫實例和數據庫是一一對應的關係,也就是一個數據庫實例對應一個數據庫;
可是,在集羣環境中存在多個數據庫實例共同使用一個數據庫。
數據庫服務器(database server):部署安裝數據庫實例的服務器。
mysql中的邏輯對象:
mysqld_process+memory+datafile|logfile|pidfile...--->庫-->表-->記錄(由行與列組成)
1、官檔 2、man 文檔 三、命令行下的幫助文件 --oracle命令行沒有,須要去查官方文檔 mysql > help; mysql > help create table; mysql> ? contents --分了不少類 Account Management Administration Data Definition Data Manipulation Data Types Functions Functions and Modifiers for Use with GROUP BY Geographic Features Language Structure Storage Engines Stored Routines Table Maintenance Transactions Triggers mysql> ? Account Management --一級一級的向內部查 mysql> ? CREATE USER