一 mysql 體系結構和存儲引擎
1.1 數據庫和實例
數據庫是指代存儲數據的各種文件
實例就是數據庫的後臺線程以及一個共享內存區組成,也就是一個進程,可以用ps -ef|grep mysqld 查看實例進程的詳細信息。
linux上讀取配置文件的順序 /etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/my.cnf->~/.my.cnf 如果文件都存在,會默認使用最後一個存在配置文件的配置。
Mac版的 mysql8已經不會生成默認配置文件
datadir在linux系統中默認爲/usr/local/mysql/data,data文件夾只是一個鏈接,指向了/opt/mysql_data/
1.2 體系結構
Mysql主要有以下幾部分組成
1 連接池組件
2 管理服務和工具組件
3 sql 接口組件
4 查詢分析器組件
5 優化器組件
6 緩衝組件 cache
7 插件式存儲引擎
8 物理文件
1.3 存儲引擎類型
1 innodb引擎
主要用oltp 在線事務處理
支持行鎖,非鎖定讀,多版本控制(mvcc),支持事務。
支持四種隔離級別,讀未提交,讀已提交,可重複度,串行讀,利用插入緩衝(insert buffer),二次寫(double write),自適應哈希索引(adaptive hash index),預讀(read ahead)來提高性能。
利用next-keylocking的策略避免幻讀
2 MyISAM引擎
主要用olap 在線數據分析
不支持事務,表鎖設計。
存儲引擎表由myi,myd文件組成,myd存儲數據文件,myi存儲索引文件。
3 NDB存儲引擎
NDB存儲引擎是一個集羣引擎。
4 Memory存儲引擎
Memory存儲引擎將數據都存儲在內存中,一旦數據庫重啓或者崩潰,數據就會消失,一般只用來存儲臨時數據。默認的索引方式是自適應哈希索引,不支持行鎖,不能使用text blob類型數據,如果使用了,則該表就會自動轉爲MyISAM引擎的表,使用變長數據依舊會按照定長數據存儲。
5 Archive
只支持insert和select,mysql5.1開始支持索引
6 Federated
指向遠程mysql表,只支持mysql表
7 Maria
MyISAM引擎升級版,支持行鎖,緩存和索引文件,mvcc。
1.4 各種存儲引擎的區別
對於事務
BDB和InnoDB支持,MYISAM不支持
鎖
MYISAM和Memory都是表鎖
BDB是page鎖
InnoDB和NDB支持行鎖。
1.5連接mysql
本節主要講了連接mysql的幾種方式,連接mysql的操作實際上就是一個連接進程和mysql實例的通信過程,也就是進程通信,進程通信主要管道,命名管道,命名字,TCP/IP套接字,UNIX域套接字。
Mysql連接主要有
1 tcp/ip
Tcp/ip是最常用的方式,jdbc連接數據庫就是基於此。
2 命名管道和共享內存
在一些早起的windows版本上。
3 unix域套接字
linux和unix環境下。