【INNODB存储引擎】上

1,介绍

类似于Linux中的存储文件

2,功能

数据读写

数据安全和一致性

提高性能

热备份

自动故障恢复

高可用方面支持 等

3,种类

InnoDB

MyISAM

MEMORY

ARCHIVE

CSV

4,存储引擎是建立在表上面的,不同表可以使用不同的存储引擎

5,其他的存储引擎支持,以下三种存储类型的共同点:压缩比较高差不多是INNODB的三倍,1:5,数据插入性极高现在很多的newSQL使用比较多的功能特性

tokuDB

rocksDB

myrocks

6,INNODB存储引擎介绍

 

 

 7,INNODB核心特性

事务(transaction)

MVCC(multi-version concurrcy control 多版本并发控制)

行级锁(row-level look)

热备份(hot backup)

ACSR(auto crash safety recovery)自动的故障安全恢复

复制  replication:group commit,GITD(Global Transaction ID),多线程(multi-threads-SQL)

8,使用当前会话查询存储引擎

select @@default_storage_engine;

 

 

 9,如何修改存储引擎

set只会影响到当前的会话

set default_storage_engine=myisam;

set global不影响当前和历史会话,只会影响到新开的会话

set global default_storage_engine=myisam;

以上两种方法重启数据库失效,除非参数添加至my.cnf

9.1最直观的存储方式

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

ib_logfile0 :这是REDO(重做日志)日志文件,事务日志文件

ib_logfile1 :这是REDO(重做日志)日志文件,事务日志文件

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

frm:存储表的列的信息
ibd:表的数据行和索引信息

 

10,表空间

各版本的共享表空间区别:

5.5:版本出现的管理模式,也是默认的管理模式他将数据字典,undo,临时表,索引,表数据都存放在ibdeta文件里

5.6:共享表空间保留,只用来存储数字字典信息,undo,临时表

5.7:临时表被独立出来

8.0:oudu也被独立出来了

10.1共享表空间设置

共享表空间设置(在搭建MySQL数据库时,在初始化之前将参数写进my.cnf中)

select @@innodb_file_per_table;  查看当前默认的表空间模式

show variables like '%extend%';  查看表空间每一次扩展是多少,默认每一次扩展64M

select @@innodb_data_file_path;  查看当前表空间的名称,大小,mysql第一次分配表空间时12M,autoextent是自增的,每扩展一次是64M
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend  设置两个ibdata表空间都是512M且自增的
innodb_autoextend_increment=64  设置每次扩展的大小
set global innodb_file_per_table=0;    设置表空间模式(=1代表frm文件和ibd文件单独存在,=0则代表将ibd文件存到ibdeta里面只有frm文件单独存放)

  10.2独立表空间

受这个下面这个参数控制=1就是独立表空间

set global innodb_file_per_table=0; 设置表空间模式(=1代表frm文件和ibd文件单独存在,=0则代表将ibd文件存到ibdeta里面只有frm文件单独存放)

从5.6以后默认的表空间不在使用共享表空间,替换为独立表空间

主要存储的是用户数据

存储特点为:一个表一个ibd文件,存储数据行和索引信息

基本表结构元数据存储:xxx.frm

最终的结论:mysql表数据=(ibdetaX+frm)+ibd(段区页)缺一不可

mysql 存储引擎日志:

redo log:ib_logfile0  ib_logfile1,重做日志

undo log:ibdate1 ibdate2(存储在共享表空间中),回滚日志

临时表:ibtmp1,在座join union 操作产生的临时数据,用完就自动丢弃

单个表空间恢复用以下两条命令

alter table t1 discard tablespace;(删除ibd文件也就是数据行和索引信息)

alter table t1 import tablespace;    (让ibdeta重新统计一下ibd文件就可以使用了,注意文件权限属主属组)

多个表恢复使用information_schema.tables配合concat语句

1.discard拼接语句,将语句导入到tmp目录下

2.登录到数据中source一下/tmp/*.sql

3.有外键会报错需要跳过外键:set foreign_key_checks=0; 然后在source一下

4.将备份的ibd文件拷贝到数据库下

5.import拼接语句,将语句导入到/tmp/*.sql

6.登录到数据中source一下/tmp/*.sql

11,事务的ACID特性

11.1 作用

影响了DML语句(insert,update,delete,一部分select)

Atomic(原子性)

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

Consistent(一致性)

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

Isolated(隔离性)

事务之间互不影响

Durable(持久性)

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

11.2事务的控制语句

一个事务的开始:begin;

一个事务的结束:commit;

回滚事务,将内存中已经执行的事务回滚回去:rollbak

11.3自动提交策略(autocommit)

查询当前事务是否开启自动提交,0为关闭1为开启:select @@autocommit;

临时关闭:set autocommit=0;

全局临时关闭:set global autocommit=0;

注意:自动提交是否打开,一般在有事务需求的MySQL中,将其关闭,不管有没有事务需求,建议设置为0,可以很大程度上提高数据性能

(1)set autocommit=0;

(2)vim /etc/my.cnf

         set autocommit=0

事务的隐式控制特性

kill掉连接会话可以断开事务

begin之后没有提交在begin,上一个begin默认提交

第一个begin之后没有提交在使用DDL,DCL之后也会默认提交

11.4redo在ACID中的一个作用

重做日志,前滚日志。主要完成ACID中的D的特性,对AC也有一定的作用

LSN号数据页也就是数据行的一个编号,TXID事务id号,主要是redobuffer里面存着数据行的一个变化过程,用来构建脏叶,将变化后数据写入到磁盘中,ib_logfile0这个是一条语句的变化过程存储位置,也叫做前滚日志

11.5 undo在ACID的一个作用

回滚日志,撤销日志,主要完成ACID中A的特性,对CI也有一定的作用

undo buffer是将磁盘中的数据页调入到内存时同时写进undobuffer,内存数据页有一个个槽位id是和undobuffer的槽位id相对应的,最终会写进ibdata1里面,将来用于做数据页的回滚操作也就是恢复到原数据

 

posted @ 2020-09-05 23:33  鄧萌  阅读(133)  评论(0)    收藏  举报