mysql刪庫跑路必會姿勢(基礎篇:MySql架構與存儲引擎)
基礎篇: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架構與存儲引擎)