第1章 存儲(chǔ)引擎介紹
存儲(chǔ)引擎可理解成 linux中的文件目錄系統(tǒng) 用于組織存儲(chǔ)數(shù)據(jù)
1.1 存儲(chǔ)引擎的種類
可通過
show engines;
# 查看系統(tǒng)所有支持的存儲(chǔ)引擎
mysql 常用的為Innodb ,MyISAM ,CSV ,Memory
percona 自帶引擎為 xtraDB
mariadb 常用引擎 Innodb ,Tokudb, Myrocks
其中 TokuDB和Myrocks引擎插入性能高 壓縮比高 非常適合zabbix等監(jiān)控服務(wù)
1.2 InnoDB存儲(chǔ)引擎核心特性
1.2.1 對(duì)比MyISAM 新特點(diǎn)
MVCC 多版本并發(fā)控制
集群(聚簇)索引 獨(dú)有的 主鍵索引
事務(wù) (重點(diǎn)) 保持?jǐn)?shù)據(jù)的一致性 完整性
鎖定粒度 支持對(duì)行鎖定 不鎖整張表 對(duì)什么行操作 鎖哪一行
外鍵 盡量不要用 容易死鎖表
更改緩沖 insert buffer 插入緩沖 獨(dú)立空間 當(dāng)插入數(shù)據(jù)時(shí) 將索引信息放到內(nèi)存中 當(dāng)不繁忙時(shí) 放入到硬盤中
自適應(yīng)列索引 為熱點(diǎn)索引生成一個(gè)索引 自動(dòng)創(chuàng)建
備份恢復(fù) 支持熱備份
自動(dòng)故障恢復(fù)(ACSR) 當(dāng)非正常關(guān)閉/重啟數(shù)據(jù)庫時(shí)自動(dòng)讀取redo undo文件恢復(fù)斷點(diǎn)操作
主從支持 新特性 GTID等
第2章 存儲(chǔ)引擎查看和配置
查看表引擎
show create table 表;
查看系統(tǒng)默認(rèn)引擎
select @@default_storage_engine;
show variables like ‘%engine%’;
# 詳細(xì)一點(diǎn)
2.1.1 修改引擎+碎片整理
alter table 表 engine=innodb;
這條命令有兩個(gè)作用
修改存儲(chǔ)引擎
整理delete刪除后的碎片 可重復(fù)執(zhí)行
第3章 innodb存儲(chǔ)引擎物理存儲(chǔ)結(jié)構(gòu)
在MySQL數(shù)據(jù)目錄下有幾個(gè)重點(diǎn)文件
其中幾個(gè)重點(diǎn)文件
ib_buffer_pool
關(guān)閉數(shù)據(jù)庫時(shí),自動(dòng)保存bufferpool緩沖熱數(shù)據(jù)文件到磁盤中. 啟動(dòng)mysql時(shí) 以數(shù)據(jù)流的方式加載到內(nèi)存中ib_data1 系統(tǒng)表空間數(shù)據(jù)文件 存儲(chǔ)數(shù)據(jù)字典 undo日志信息等
ib_logfile 0-N 重做日志文件 (redo.log) 與事務(wù)相關(guān)
ibtmp1 臨時(shí)表空間文件 在內(nèi)存中生成空間 對(duì)數(shù)據(jù)行進(jìn)行操作(DML)時(shí) 將數(shù)據(jù)拉入到內(nèi)空間 修改完成后寫入到磁盤
3.1 表空間 ib_data1
參考資料: https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html
表空間分為兩部分:
3.1.1 共享空間
在5.5加入的功能 用來作為innodb的默認(rèn)存儲(chǔ)方式 將所有數(shù)據(jù)統(tǒng)一存儲(chǔ)到ib_data1中
缺點(diǎn)很明顯 **所有的數(shù)據(jù)和索引存放到一個(gè)文件中刮萌,將有一個(gè)很常大的文件钮孵,雖然可以把一個(gè)大文件分成多個(gè)小文件,但是多個(gè)表及索引在表空間中混合存儲(chǔ)吕粹,這樣對(duì)于一個(gè)表做了大量刪除操作后表空間中將會(huì)有大量的空隙族扰,特別是對(duì)于統(tǒng)計(jì)分析厌丑,日志系統(tǒng)這類應(yīng)用最不適合用共享表空間 **
3.1.1.1 共享表空間設(shè)置
查看配置
show variables like ‘%innodb_data_file_path%’;
select @@innodb_data_file_path;
小結(jié): 一般是在數(shù)據(jù)空初始化前進(jìn)行配置 在配置文件中編寫 獨(dú)立表空間為何還要變回共享
3.1.2 獨(dú)立表空間
優(yōu)點(diǎn):
每個(gè)表都有自已獨(dú)立的表空間。
每個(gè)表的數(shù)據(jù)和索引都會(huì)存在自已的表空間中别伏。
可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫中移動(dòng)蹄衷。
空間可以回收。
發(fā)展史:
在5.6以后的版本作為innodb的默認(rèn)存儲(chǔ)模式
5.6 版本 把表空間中的數(shù)據(jù)行(表數(shù)據(jù))和元數(shù)據(jù)從ib_data1中獨(dú)立出來了
元數(shù)據(jù) 數(shù)據(jù)行+索引
mysql表數(shù)據(jù) (ibdataX+frm)+ibd(段厘肮、區(qū)愧口、頁)
DDL DML+DQL
3.1.3 獨(dú)立表空間管理
查看
select @@innodb_file_per_table;
1為開啟 0為關(guān)閉
3.2 共享表空間以及獨(dú)占表空間之間的轉(zhuǎn)化
修改獨(dú)占空表空間配置,以下幾個(gè)參數(shù)必須在一起加入
在etc/my.cnf
下進(jìn)行配置
innodb_data_home_dir = "/usr/local/mysql/var/"
數(shù)據(jù)庫文件所存放的目錄
innodb_log_group_home_dir = "/usr/local/mysql/var"
日志存放目錄
innodb_data_file_path=ibdata1:10M:autoextend
設(shè)置配置一個(gè)可擴(kuò)展大小的尺寸為10MB的單獨(dú)文件(共享數(shù)據(jù)文件)类茂,名為ibdata1耍属。沒有給出文件的位置,所以默認(rèn)的是在MySQL的數(shù)據(jù)目錄內(nèi)(如 /db/mysql/ibdata1)巩检。
innodb_file_per_table=1
是否使用共享以及獨(dú)占表空間(1 為使用獨(dú)占表空間厚骗,0 為使用共享表空間)
innodb_file_per_table
通過這個(gè)參數(shù)來實(shí)現(xiàn)的轉(zhuǎn)化,如果為OFF說明所使用的是共享表空間【默認(rèn)情況下兢哭,所使用的表空間為共享表空間】
innodb_file_per_table
值來進(jìn)行修改即可领舰,但是對(duì)于之前使用過的共享表空間則不會(huì)影響,除非手動(dòng)的去進(jìn)行修改
注意:
InnoDB不創(chuàng)建目錄迟螺,所以在啟動(dòng)服務(wù)器之前請(qǐng)確認(rèn)”所配置的路徑目錄”的確存在冲秽。
做數(shù)據(jù)的移植以及備份時(shí),要注意數(shù)據(jù)文件的完整性.