储存引擎介绍
1. 文件系统
操作系统存取数据的一种机制
2. 文件系统类型
不管使用什么文件系统,数据内容不会变化
不同的是,存储空间、大小、速度
3. MySQL存储引擎
可以理解为,MySQL的“文件系统”,只不过功能更加强大
4. MySQL存储引擎功能
数据读写
数据安全和一致性
提高性能
热备份
自动故障恢复
高可用方面支持
MySQL储存引擎分类
1. MySQL提供的存储引擎类型如下:
InnoDB
MyISAM
CSV
MEMORY
ARCHIVE
#查看支持的存储引擎
show engines;
#查看所有InnoDB的表
select table_schema,table_name,engine
from information_schema.tables
where engine='innodb';
#查看所有MyISAM的表
select table_schema,table_name,engine
from information_schema.tables
where engine='myisam';
2.其他MySQL分支的存储引擎
PeconaDB:默认XtraDB
MariaDB:默认InnoDB
3.其他存储引擎(压缩比高,插入数据性能更高)
TokuDB
RocksDB
MyRocks
4.InnoDB和MyISAM的区别
物理上的区别
InnoDB:
.frm:数据列信息
.ibd:数据行和索引信息
MyISAM:
.frm:数据列信息
.MYD:数据行信息
.MYI:索引信息
特性上的区别
InnoDB:支持事物,行锁,MVCC多版本并发控制,支持外键,支持热备,支持自动故障恢
复(CSR)
事务(Transaction)
MVCC(Multi-Version Concurrency Control多版本并发控制)
行级锁(Row-level Lock)
ACSR(Auto Crash Safey Recovery)自动的故障安全恢复
支持热备份(Hot Backup)
复制Replication: Group Commit , GTID (Global Transaction ID) ,多线程(MTS,MultiThreads-SQL )
MyISAM:不支持
5.查看存储引擎
#1.查看会话存储引擎
SELECT @@default_storage_engine;
show variables like '%engine%';
#2.查看指定表的存储引擎
SHOW CREATE TABLE city\G;
SHOW TABLE STATUS LIKE 'city'\G
#3.查看所有表的存储引擎
select table_schema,table_name,engine
from information_schema.tables
where table_schema not in
('sys','mysql','information_schema','performance_schema');
6.设置存储引擎
#1.临时修改存储引擎,重启失效
#1)当前会话
set default_storage_engine=innodb;
#2)新会话(全局)
set global default_storage_engine=innodb;
#2.永久修改存储引擎
#1)修改配置文件
vim /etc/my.cnf
[mysqld]
default_storage_engine=innodb
#2)创建表指定存储引擎
create table t (i INT) engine=innodb;
#3)修改指定表的存储引擎
alter table city engine innodb;
表空间概述
1.MySQL数据文件类型
ib_buffer_pool:热数据缓存数据,下次启动优先加载
ibdata1:系统数据字典信息(整个数据库统计信息,表的元数据),UNDO(回滚)表空间等数据。
又被称为共享表空间
ib_logfile0 ~ ib_logfile1: REDO(重做日志)日志文件,事务日志文件
ibtmp1: 临时表空间磁盘位置,存储临时表
frm:存储表的列信息
ibd:表的数据行和索引
2.共享表空间
需要将所有数据存储到同一个表空间中 ,耦合性大,管理比较混乱
5.5版本出现的管理模式,也是默认的管理模式。(数据字典,undo,临时表,索引,表数据)
mysqldump -uroot -p123 -A --triggers -R --master-data=2 >/tmp/full.sql
sed -i 's#ENGINE=MyISAM#ENGINE=INNODB#g' /tmp/full.sql
mysql -uroot -p123 < /tmp/full.sql
5.6版本以前,共享表空间保留,只用来存储:数据字典信息,undo,临时表。
5.7版本,临时表被独立出来了
8.0版本,undo也被独立出去了
事务概述
1.事务介绍
主要针对DML语句(insert,update,delete)的一组数据操作执行步骤,这些步骤被视为一个工作单元
1)用于对多个语句进行分组
2)在在多个客户端并发访问同一个表中的数据时使用
3)如果所有步骤都成功,则执行
4)如果步骤出现错误或不完整,则取消
2.事务特性-ACID
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
3.事务控制语句
#1.自动提交
#查看自动提交
mysql> show variables like 'autocommit';
#临时关闭
mysql> set autocommit=0;
#永久关闭
[root@db01 world]# vim /etc/my.cnf
[mysqld]
autocommit=0
4.隐式事务提交
现在版本在开启事务时,不需要手工begin,只要你输入的是DML语句,就会自动开启事务。
有些情况下事务会被隐式提交
在事务运行期间,手工执行begin的时候会自动提交上个事务
在事务运行期间,加入DDL、DCL操作会自动提交上个事务
在事务运行期间,执行锁定语句(lock tables、unlock tables)
load data infile
在autocommit=1的时候(默认就开启了自动提交,生产环境需要关闭)
事务日志
mysql的工作机制
1.所有的操作都在内存进行
2.优先写日志
3.先看redo,在看undo