功能了解
數(shù)據(jù)讀寫
數(shù)據(jù)安全和一致性
提高性能
熱備份
自動故障恢復(fù)
高可用方面支持
等.
存儲引擎種類
InnoDB
MyISAM
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
mysql>show engines;
innodb核心特性:

1、事務(wù)(Transaction)
2、MVCC(Multi-Version Concurrency Control多版本并發(fā)控制)
3、行級鎖(Row-level Lock)
4、ACSR(Auto Crash Safey Recovery)自動的故障安全恢復(fù)
5、支持熱備份(Hot Backup)6、Replication:Group Commit,GTID(GlobalTransactionID),多線程(Multi-Threads-SQL)
存儲引擎查看
使用 SELECT 確認(rèn)會話存儲引擎
SELECT @@default_storage_engine;
寫入配置文件vim/etc/my.cnf? ? [mysqld]default_storage_engine=myisam
SHOW 確認(rèn)每個表的存儲引擎:
SHOW CREATE TABLE City\G;
SHOW TABLE STATUS LIKE 'CountryLanguage'\G
?INFORMATION_SCHEMA 確認(rèn)每個表的存儲引擎
selecttable_schema,table_name,enginefrominformation_schema.tableswheretable_schema notin('sys','mysql','information_schema','performance_schema');
?修改一個表的存儲引擎
db01 [oldboy]>alter table t1 engine innodb;注意:此命令我們經(jīng)常使用他,進(jìn)行innodb表的碎片整理
平常處理過的MySQL問題--碎片處理(面試問題)
db01 [oldboy]>alter table t1 engine innodb;注意:此命令我們經(jīng)常使用他,進(jìn)行innodb表的碎片整理
5.6 平常處理過的MySQL問題--碎片處理
環(huán)境:centos7.4,MySQL 5.7.20,InnoDB存儲引擎業(yè)務(wù)特點:數(shù)據(jù)量級較大,經(jīng)常需要按月刪除歷史數(shù)據(jù).
問題:磁盤空間占用很大,不釋放處理方法:以前:將數(shù)據(jù)邏輯導(dǎo)出,手工drop表
,然后導(dǎo)入進(jìn)去現(xiàn)在:對表進(jìn)行按月進(jìn)行分表(partition,中間件)業(yè)務(wù)替換為truncate方式
定期進(jìn)行碎片整理
最直觀的存儲方式(/data/mysql/data)
ibdata1:系統(tǒng)數(shù)據(jù)字典信息(統(tǒng)計信息),UNDO表空間等數(shù)據(jù)
ib_logfile0 ~ ib_logfile1: REDO日志文件,事務(wù)日志文件。
ibtmp1: 臨時表空間磁盤位置,存儲臨時表
frm:存儲表的列信息
ibd:表的數(shù)據(jù)行和索引
表空間(Tablespace)
6.1.1、共享表空間
需要將所有數(shù)據(jù)存儲到同一個表空間中 ,
管理比較混亂5.5版本出現(xiàn)的管理模式,
也是默認(rèn)的管理模式。5.6版本以,共享表空間保留,只用來存儲:數(shù)據(jù)字典信息,undo,臨時表。
5.7 版本,臨時表被獨立出來了
8.0版本,undo也被獨立出去了
共享表空間設(shè)置(在搭建MySQL時,初始化數(shù)據(jù)之前設(shè)置到參數(shù)文件中)
mysql>select @@innodb_data_file_path;
+-------------------------+
| @@innodb_data_file_path |
+-------------------------+
| ibdata1:12M:autoextend? |
+-------------------------+
1 row in set (0.00 sec)
mysql>show variables like '%extend%';
+-----------------------------+-------+
| Variable_name? ? ? ? ? ? ? | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64? ? |
+-----------------------------+-------+
1 row in set (0.01 sec)
搭建數(shù)據(jù)庫環(huán)境的時候? 可以提前設(shè)置好共享表空間
獨立表空間:
從5.6,默認(rèn)表空間不再使用共享表空間,替換為獨立表空間。
主要存儲的是用戶數(shù)據(jù)存儲特點為:一個表一個ibd文件,
存儲數(shù)據(jù)行和索引信息基本表結(jié)構(gòu)元數(shù)據(jù)存儲:xxx.frm最終結(jié)論: 元數(shù)據(jù) 數(shù)據(jù)行+索引mysql表數(shù)據(jù)=(ibdataX+frm)+ibd(段、區(qū)、頁)
DDL DML+DQLMySQL的存儲引擎日志:Redo Log:ib_logfile0 ib_logfile1
,重做日志Undo Log:ibdata1ibdata2(存儲在共享表空間中),
回滾日志臨時表:ibtmp1,在做joinunion操作產(chǎn)生臨時數(shù)據(jù),用完就自動
mysql>select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
|? ? ? ? ? ? ? ? ? ? ? 1 |
+-------------------------+
alter table city dicard tablespace;? ?alter table cityimporttablespace;?比較重要
關(guān)閉表空間語句 (慎用)
set global innodb_file_per_table=0;
事務(wù)的ACID特性
Atomic(原子性)
所有語句作為一個單元全部成功執(zhí)行或全部取消。不能出現(xiàn)中間狀態(tài)。
Consistent(一致性)
如果數(shù)據(jù)庫在事務(wù)開始時處于一致狀態(tài),則在執(zhí)行該事務(wù)期間將保留一致狀態(tài)。
Isolated(隔離性)
事務(wù)之間不相互影響。
Durable(持久性)
事務(wù)成功完成后,所做的所有更改都會準(zhǔn)確地記錄在數(shù)據(jù)庫中。所做的更改不會丟失。
事務(wù)的生命周期(事務(wù)控制語句)
?事務(wù)的開始
begin
標(biāo)準(zhǔn)的事物語句
DML:insert delete update
DDL?就是一個事物
自動提交策略(autocommit)
db01[(none)]>select @@autocommit;
db01[(none)]>setautocommit=0;
db01[(none)]>setglobalautocommit=0;
注:自動提交是否打開,一般在有事務(wù)需求的MySQL中,將其關(guān)閉不管有沒有事務(wù)需求,
我們一般也都建議設(shè)置為0,可以很大程度上提高數(shù)據(jù)庫性能
(1)setautocommit=0;setglobalautocommit=0;
+(2)vim/etc/my.cnfautocommit=0
?隱式提交語句
用于隱式提交的SQL語句:begin
a b
begin?
SETAUTOCOMMIT=1
導(dǎo)致提交的非事務(wù)語句:DDL語句: (ALTER、CREATE和DROP)
DCL語句: (GRANT、REVOKE和SETPASSWORD)
鎖定語句:(LOCKTABLES和UNLOCKTABLES)
導(dǎo)致隱式提交的語句示例:TRUNCATETABLE
LOAD DATA INFILE
SELECT FOR UPDATE
InnoDB 事務(wù)的ACID如何保證?


redo的buffer:數(shù)據(jù)頁的變化信息+數(shù)據(jù)頁當(dāng)時的LSN號LSN:日志序列號 磁盤數(shù)據(jù)頁、內(nèi)存數(shù)據(jù)頁、redobuffer、redolog
臟頁? 內(nèi)存里的數(shù)據(jù)?沒有寫到磁盤里的數(shù)據(jù)
checkpoint?將臟頁的數(shù)據(jù)刷到磁盤