1. 程式人生 > >mysql刪庫跑路必會姿勢(基礎篇:MySql架構與存儲引擎)

mysql刪庫跑路必會姿勢(基礎篇:MySql架構與存儲引擎)

文本文 creat 數據 sql ltp engine mysql5 並發 acid

基礎篇:MySql架構與存儲引擎

邏輯架構圖:

技術分享圖片

連接層:

技術分享圖片

mysql啟動後(可以把mysql類比為一個後臺的服務器),等待客戶端請求,當請求到來後,mysql建立一個一個線程處理(線程池則分配一個空線程,當然也可使用nio線程模型。),每個線程獨立,擁有獨自內存空間。當請求為select請求則沒有關系,但是請求為update時,多線程同時修改一塊內存,就會引發一系列問題,由此引出 “鎖“的概念。

查看mysql當前連接數:

show VARIABLES like ‘%max_connections%‘

修改mysql連接數為200
set GLOBAL max_connections = 200

技術分享圖片

同時當客戶端連接到mysql服務器時,服務器會對其進行權限驗證,包括,ip,用戶名,密碼的驗證,同時還要驗證是否有對操作某一個庫,表的權限。

SQL處理層:

技術分享圖片

show variables like ‘%query_cache_type%‘

SET GLOBAL query_cache_size = 188888888;

是否打開mysql查詢結果緩存,默認關閉,打開後,mysql會對查詢出來的結果進行緩存,實際應用中業務數據一般不在db層緩存

mysql默認打開sql解析緩存;平時我們說的sql緩存,一般指的sql解析緩存。

解析查詢:

技術分享圖片

技術分享圖片

mysql對客戶端傳入的sql語句會按照一定的規則進行sql解析,而後進行sql優化,最後執行優化過的sql語句。而不是直接執行。

存儲引擎:

show engines;查看存儲引擎

MyISAM

技術分享圖片

進入show VARIABLES like ‘datadir‘ 查看mysql數據文件所在路徑,發現myisam引擎會生產三個數據文件,xxx.frm存儲表結構文件,所有引擎都有此文件,xxx.MYD存儲表數據文件,xxx.MYI存儲表索引文件

特性:

並發性

支持表級鎖,

支持全文檢索,

支持數據文件壓縮

試用場景:

只讀類應用;

非事物行應用(數據倉庫,報表,數據)

空間類應用(坐標)

Innodb

技術分享圖片

show VARIABLES like ‘innodb_file_per_table‘ 查看innodb表空間類型
set global innodb_file_per_table=off 設置innodb使用系統表空間

mysql5.6以前默認使用系統表空間

系統表空間無法簡單的收縮文件大小。

獨立表空可以通過optimize table 收縮系統文件

系統表空間會產生io瓶頸

獨立表空間可以同時向多個文件刷新數據

推薦使用獨立表空間

特性:

Innodb是一種事務性存儲引擎

完全支持事物的acid特性

redo Log和Undo Log

Innodb支持行級鎖(並發度更高)

試用場景

適合大多數的oltp應用。

技術分享圖片

csv

技術分享圖片

特點:

以csv格式進行數據存儲,

所有列都不能為空,

不支持索引,

可以直接對數據文件直接編輯(直接修改文本文件,達到修改表的目的)。

create table mycsv(id int not null,c1 VARCHAR(10) not null,c2 char(10) not null)
engine=csv;
insert into mycsv values(1,‘aaa‘,‘bbb‘),(2,‘cccc‘,‘dddd‘);
修改文本數據
flush TABLES;
select * from mycsv
create index idx_id on mycsv(id)

應用場景:

需要頻繁導入導出表數據的場景,如財務報表類

Archive

技術分享圖片

應用場景:日誌以及數據采集。

Memory

技術分享圖片

show VARIABLES like ‘max_heap_table_size‘ 查看memory引擎最大空間。

技術分享圖片

使用場景:

hash索引用於查找或者是映射表(郵編和地區對應)

用於保存數據分析中產生的中間表

用於緩存周期性聚合數據的結果表

memory數據容易丟失,所以要求數據可再生。

Ferderted

特點:提供了遠程訪問mysql服務器上表的方法

本地不存儲數據,數據全部放到遠程服務器上

本地需要保存表結構和遠程服務器的連接信息

使用場景:邊界數據庫,表 同步

該引擎默認禁止,啟用時需增加federated參數

表明,列名需要與遠程表相同

CREATE TABLE `local_fed` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` varchar(10) NOT NULL DEFAULT ‘‘,
`c2` char(10) NOT NULL DEFAULT ‘‘,
PRIMARY KEY (`id`)
) ENGINE=federated CONNECTION
=‘mysql://root:[email protected]:3306/remote/remote_fed‘

應用篇:鎖,事物,索引

待續。。。。。。

優化篇:慢查詢,sql優化

mysql刪庫跑路必會姿勢(基礎篇:MySql架構與存儲引擎)