mysql體系結構和儲存引擎
1、資料庫、例項的概念
資料庫:物理作業系統檔案或其它形式檔案型別的集合
例項:mysql資料庫由後台執行緒以及乙個共享記憶體區組成。共享記憶體區可以被執行的後台執行緒所共享。資料庫例項才是真正用於運算元據庫檔案的。
在mysql資料庫中,例項與資料庫的關係通常是一一對應的,即乙個例項對應乙個資料庫,乙個資料庫對應乙個例項。但是,在集群情況下可能存在乙個資料庫被多個資料例項使用的情況。
mysql被設計為乙個但程序多執行緒架構的資料庫,mysql資料庫例項在系統上的表現就是乙個程序。
./mysqld_safe& 啟動mysql資料庫例項
ps -ef | grep mysqld 檢視資料庫啟動後的程序情況
當啟動例項時,mysql資料庫會去讀取配置檔案,根據配置檔案的引數來啟動資料庫例項,在mysql資料庫中,可以沒有配置檔案,這種情況下,mysql會按照編譯時的預設引數設定啟動例項。
mysql --help | grep my.cnf mysql資料庫例項啟動時,會在哪些位置查詢配置檔案。【如果幾個配置檔案有相同的引數,以讀取到的最後乙個配置檔案的引數為準】
配置檔案中有乙個引數datadir,該引數指定了資料庫所在的路徑。linux下預設datadir為 /usr/local/mysql/data
2、mysql體系結構
mysql由以上幾部分組成
# 連線池元件
# 管理服務和工具元件
# sql介面元件
# 查詢分析器元件
# 優化器元件
# 緩衝(cache)元件
# 外掛程式式儲存引擎
# 物理檔案
mysql資料庫區別於其它資料庫的最重要的乙個特點就是其外掛程式式的儲存引擎,需要注意的是,儲存引擎是基於表的,而不是資料庫。
下面是中文圖示
3、mysql儲存引擎
儲存引擎可以分為mysql官方儲存引擎和第三方儲存引擎
myisam儲存引擎:不支援事務、表鎖設計,支援全文索引,主要面向一些olap資料庫應用5.5.8以前,是預設的儲存引擎(windows版本除外)。
ndb儲存引擎:是乙個集群儲存引擎,其結構是share noting的集群架構,因此能提供更高的可用性。ndb的特點是資料全部放在記憶體中(5.5.1開始,可以將非索引資料放在磁碟上),因此主鍵查詢的速度極快,並且通過新增ndb資料儲存節點(data node)可以線性的提高資料庫效能,是高可用、高效能的集群系統。
memory儲存引擎:將表中的資料存放在記憶體中,如果資料庫重啟或發生崩潰,表中的資料都將消失。它非常適用於儲存臨時資料的臨時表以及資料倉儲中的緯度表。預設使用雜湊索引,非b+樹索引。
archive儲存引擎:只支援insert和select操作,5.1開始支援索引,使用zlib演算法將資料行(row)進行壓縮後儲存,壓縮比可達1:10,非常適合儲存歸檔資料,如日誌資訊。
federated儲存引擎:不存放資料,只是指向一台遠端mysql資料庫伺服器上的表。
maria儲存引擎:新開發的儲存引擎,設計目標主要是用來替代myisam儲存引擎。
除了上面提到的儲存引擎,還有很多儲存引擎,他們都有各自的使用場景。
# mysql資料庫支援全文索引,myisam, innodb和sphinx儲存引擎都支援。
show engines; 檢視當前使用的mysql資料庫所支援的儲存引擎。也可以通過查詢information_schema架構下的engines表。
create table mytest engine = myisam; 建立mytest表,儲存引擎為myisam
alter table mytest engine = innodb; 更改mytest表的儲存引擎為innodb
使用不同的儲存引擎,表的大小也不相同,通過表的大小,簡單說明了各儲存引擎之間的不同
4、連線mysql
連線mysql的操作是乙個連線程序和mysql資料庫例項進行通訊。從程式設計的角度來說,本質上是程序通訊,常用的程序通訊方式有管道、命名管道、命名字、tcp/ip套接字、unix域套接字。
# tcp/ip
tcp/ip套接字方式是mysql資料庫在任何平台下都提供的連線方式,也是網路中使用的最多的一種方式。一般情況下客戶端(client)和mysql例項(server)不在同一臺機器上,通過tcp/ip網路連線。
例如:mysql -h192.168.0.18 -u xs -p
enter password:
msql>
在通過tcp/ip連線到mysql例項時,mysql資料庫會先檢查一張許可權檢視,用來判斷發起請求的客戶端ip是否允許連線到mysql例項。
msql>use mysql;
msql>select host,user,password from user;
host顯示%,表示任何ip都可以連線。
# 命名管道和共享記憶體
如果兩個需要程序通訊的程序在同一臺伺服器上,那麼可以使用命名管道。
# unix域套接字
在linux和unix環境下,可以使用unix套接字,unix域不是乙個網路協議,所以只能在mysql客戶端和資料庫例項在一台伺服器上的情況下使用。當資料庫例項啟動後,使用者可以通過下列命令進行unix域套接字檔案查詢
show variables like 'socket';
知道了unix域套接字檔案的路徑後,就可以使用該方式進行連線
mysql -u lxs -s /tmp/mysql.sock
連線成功 mysql>
準備看一下這本書,順便做一下記錄,剛開始寫,慢慢的也提高一下寫部落格的水平。有看過這本書的可以交流一下
MySQL技術內幕InnoDB儲存引擎
第5章 索引與演算法 p174 217 5.1 innodb儲存引擎索引概述 5.2 二分查詢法 5.3 平衡二叉樹 5.4 b 樹 5.4.1b 樹的插入操作 5.4.2b 樹的刪除操作 了解了一下例子 5.5b 樹索引 p181 195 5.5.1聚集索引 按主鍵建立b 樹索引 5.5.2非聚集...
MySQL技術內幕 InnoDB儲存引擎
第五章 索引與演算法 常用的型別有 all index range ref eq ref const system null 從左到右,效能從差到好 all full table scan,mysql將遍歷全表以找到匹配的行 index full index scan,index與all區別為ind...
MySQL技術內幕 InnoDB儲存引擎 筆記
mysql 體系結構和儲存引擎 資料庫 物理作業系統檔案或其他形式檔案內容的集合 資料庫例項 有資料庫後台程序 執行緒記憶乙個共享記憶體區組成 mysql資料庫在沒有配置檔案的情況下,會按照編譯時的預設引數設定啟動例項 mysql 按照 etc my.cnf etc mysql my.cnf usr...