2020-02-28存储引擎

功能了解

数据读写

数据安全和一致性

提高性能

热备份

自动故障恢复

高可用方面支持

等.

存储引擎种类

InnoDB

MyISAM

MEMORY

ARCHIVE

FEDERATED

EXAMPLE

BLACKHOLE

MERGE

NDBCLUSTER

CSV

mysql>show engines;

innodb核心特性:

1、事务(Transaction)

2、MVCC(Multi-Version Concurrency Control多版本并发控制)

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;注意:此命令我们经常使用他,进行innodb表的碎片整理


平常处理过的MySQL问题--碎片处理(面试问题)

db01 [oldboy]>alter table t1 engine innodb;注意:此命令我们经常使用他,进行innodb表的碎片整理

5.6 平常处理过的MySQL问题--碎片处理

环境:centos7.4,MySQL 5.7.20,InnoDB存储引擎业务特点:数据量级较大,经常需要按月删除历史数据.

问题:磁盘空间占用很大,不释放处理方法:以前:将数据逻辑导出,手工drop表

,然后导入进去现在:对表进行按月进行分表(partition,中间件)业务替换为truncate方式

定期进行碎片整理

最直观的存储方式(/data/mysql/data)


ibdata1:系统数据字典信息(统计信息),UNDO表空间等数据

ib_logfile0 ~ ib_logfile1: REDO日志文件,事务日志文件。

ibtmp1: 临时表空间磁盘位置,存储临时表

frm:存储表的列信息

ibd:表的数据行和索引

表空间(Tablespace)


6.1.1、共享表空间

需要将所有数据存储到同一个表空间中 ,

管理比较混乱5.5版本出现的管理模式,

也是默认的管理模式。5.6版本以,共享表空间保留,只用来存储:数据字典信息,undo,临时表。

5.7 版本,临时表被独立出来了

8.0版本,undo也被独立出去了

共享表空间设置(在搭建MySQL时,初始化数据之前设置到参数文件中)

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)

搭建数据库环境的时候  可以提前设置好共享表空间

独立表空间:

从5.6,默认表空间不再使用共享表空间,替换为独立表空间。

主要存储的是用户数据存储特点为:一个表一个ibd文件,

存储数据行和索引信息基本表结构元数据存储:xxx.frm最终结论: 元数据 数据行+索引mysql表数据=(ibdataX+frm)+ibd(段、区、页)

DDL DML+DQLMySQL的存储引擎日志:Redo Log:ib_logfile0 ib_logfile1

,重做日志Undo Log:ibdata1ibdata2(存储在共享表空间中),

回滚日志临时表:ibtmp1,在做joinunion操作产生临时数据,用完就自动

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(原子性)

所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。

Consistent(一致性)

如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。

Isolated(隔离性)

事务之间不相互影响。

Durable(持久性)

事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。

事务的生命周期(事务控制语句)


 事务的开始

begin

标准的事物语句

DML:insert delete update

DDL 就是一个事物

自动提交策略(autocommit)

db01[(none)]>select @@autocommit;

db01[(none)]>setautocommit=0;

db01[(none)]>setglobalautocommit=0;

注:自动提交是否打开,一般在有事务需求的MySQL中,将其关闭不管有没有事务需求,

我们一般也都建议设置为0,可以很大程度上提高数据库性能

(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:数据页的变化信息+数据页当时的LSN号LSN:日志序列号 磁盘数据页、内存数据页、redobuffer、redolog

脏页  内存里的数据 没有写到磁盘里的数据

checkpoint 将脏页的数据刷到磁盘

你可能感兴趣的:(2020-02-28存储引擎)