功能了解
數(shù)據(jù)讀寫
數(shù)據(jù)安全和一致性
提高性能
熱備份
自動故障恢復
高可用方面支持
等.
存儲引擎種類
InnoDB
MyISAM
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
mysql>show engines;
innodb核心特性:
1、事務(Transaction)
2沸手、MVCC(Multi-Version Concurrency Control多版本并發(fā)控制)
3八拱、行級鎖(Row-level Lock)
4缭保、ACSR(Auto Crash Safey Recovery)自動的故障安全恢復
5涯鲁、支持熱備份(Hot Backup)6坤学、Replication:Group Commit,GTID(GlobalTransactionID),多線程(Multi-Threads-SQL)
存儲引擎查看
使用 SELECT 確認會話存儲引擎
SELECT @@default_storage_engine;
寫入配置文件vim/etc/my.cnf? ? [mysqld]default_storage_engine=myisam
SHOW 確認每個表的存儲引擎:
SHOW CREATE TABLE City\G;
SHOW TABLE STATUS LIKE 'CountryLanguage'\G
?INFORMATION_SCHEMA 確認每個表的存儲引擎
selecttable_schema,table_name,enginefrominformation_schema.tableswheretable_schema notin('sys','mysql','information_schema','performance_schema');
?修改一個表的存儲引擎
db01 [oldboy]>alter table t1 engine innodb;注意:此命令我們經(jīng)常使用他皱坛,進行innodb表的碎片整理
平常處理過的MySQL問題--碎片處理(面試問題)
db01 [oldboy]>alter table t1 engine innodb;注意:此命令我們經(jīng)常使用他尊勿,進行innodb表的碎片整理
5.6 平常處理過的MySQL問題--碎片處理
環(huán)境:centos7.4,MySQL 5.7.20,InnoDB存儲引擎業(yè)務特點:數(shù)據(jù)量級較大,經(jīng)常需要按月刪除歷史數(shù)據(jù).
問題:磁盤空間占用很大,不釋放處理方法:以前:將數(shù)據(jù)邏輯導出,手工drop表
,然后導入進去現(xiàn)在:對表進行按月進行分表(partition,中間件)業(yè)務替換為truncate方式
定期進行碎片整理
最直觀的存儲方式(/data/mysql/data)
ibdata1:系統(tǒng)數(shù)據(jù)字典信息(統(tǒng)計信息)僧凤,UNDO表空間等數(shù)據(jù)
ib_logfile0 ~ ib_logfile1: REDO日志文件,事務日志文件元扔。
ibtmp1: 臨時表空間磁盤位置躯保,存儲臨時表
frm:存儲表的列信息
ibd:表的數(shù)據(jù)行和索引
表空間(Tablespace)
6.1.1、共享表空間
需要將所有數(shù)據(jù)存儲到同一個表空間中 澎语,
管理比較混亂5.5版本出現(xiàn)的管理模式途事,
也是默認的管理模式。5.6版本以擅羞,共享表空間保留尸变,只用來存儲:數(shù)據(jù)字典信息,undo,臨時表。
5.7 版本,臨時表被獨立出來了
8.0版本,undo也被獨立出去了
共享表空間設置(在搭建MySQL時减俏,初始化數(shù)據(jù)之前設置到參數(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)境的時候? 可以提前設置好共享表空間
獨立表空間:
從5.6召烂,默認表空間不再使用共享表空間,替換為獨立表空間娃承。
主要存儲的是用戶數(shù)據(jù)存儲特點為:一個表一個ibd文件奏夫,
存儲數(shù)據(jù)行和索引信息基本表結構元數(shù)據(jù)存儲:xxx.frm最終結論: 元數(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;?比較重要
關閉表空間語句 (慎用)
set global innodb_file_per_table=0;
事務的ACID特性
Atomic(原子性)
所有語句作為一個單元全部成功執(zhí)行或全部取消。不能出現(xiàn)中間狀態(tài)。
Consistent(一致性)
如果數(shù)據(jù)庫在事務開始時處于一致狀態(tài)碟婆,則在執(zhí)行該事務期間將保留一致狀態(tài)。
Isolated(隔離性)
事務之間不相互影響惕稻。
Durable(持久性)
事務成功完成后竖共,所做的所有更改都會準確地記錄在數(shù)據(jù)庫中。所做的更改不會丟失俺祠。
事務的生命周期(事務控制語句)
?事務的開始
begin
標準的事物語句
DML:insert delete update
DDL?就是一個事物
自動提交策略(autocommit)
db01[(none)]>select @@autocommit;
db01[(none)]>setautocommit=0;
db01[(none)]>setglobalautocommit=0;
注:自動提交是否打開公给,一般在有事務需求的MySQL中,將其關閉不管有沒有事務需求蜘渣,
我們一般也都建議設置為0淌铐,可以很大程度上提高數(shù)據(jù)庫性能
(1)setautocommit=0;setglobalautocommit=0;
+(2)vim/etc/my.cnfautocommit=0
?隱式提交語句
用于隱式提交的SQL語句:begin
a b
begin?
SETAUTOCOMMIT=1
導致提交的非事務語句:DDL語句: (ALTER、CREATE和DROP)
DCL語句: (GRANT蔫缸、REVOKE和SETPASSWORD)
鎖定語句:(LOCKTABLES和UNLOCKTABLES)
導致隱式提交的語句示例:TRUNCATETABLE
LOAD DATA INFILE
SELECT FOR UPDATE
InnoDB 事務的ACID如何保證?
redo的buffer:數(shù)據(jù)頁的變化信息+數(shù)據(jù)頁當時的LSN號LSN:日志序列號 磁盤數(shù)據(jù)頁腿准、內存數(shù)據(jù)頁、redobuffer拾碌、redolog
臟頁? 內存里的數(shù)據(jù)?沒有寫到磁盤里的數(shù)據(jù)
checkpoint?將臟頁的數(shù)據(jù)刷到磁盤